我正在使用第 3 方 REST API,其中一个字段(类型 string
)具有一组已知值,我已将其建模为 enum
在我的代码中。 JSON.NET 中的 StringEnumConverter
正确序列化了除其中一个值之外的所有值,如 [EnumMemberAttribute]
注释所述。特别是对于此字段,REST API 将 null
值转换为第 3 方系统中的“系统默认值”;然而,当 JSON.NET 序列化它时,它使用成员名称而不是注释中描述的值。我知道我可以编写一个自定义转换器来处理这个问题,但我的问题是是否有办法让它在没有转换器的情况下工作,因为只有 null
值没有正确序列化?
我在代码中定义的枚举
:
[JsonConverter(typeof(StringEnumConverter))]
public enum InitialScanLevel
{
[EnumMember(Value = null)]
SystemDefault,
[EnumMember(Value = "0")]
ModelDeviceOnly,
[EnumMember(Value = "1")]
InitialAppPopulation,
[EnumMember(Value = "2")]
DiscoverSslCerts,
[EnumMember(Value = "3")]
DiscoverOpenPorts,
[EnumMember(Value = "4")]
AdvancedPortDiscovery,
[EnumMember(Value = "5")]
DeepDiscovery
}
对于 InitialScanLevel.SystemDefault
,结果 JSON 是(不是第 3 方 API 所期望的)
{
other fields...,
"initialScanLevel":"SystemDefault",
other fields...
}
但应该是
{
other fields...,
"initialScanLevel":null,
other fields...
}
对于 InitialScanLevel.DeepDiscovery
,结果 JSON 是(这是第 3 方 API 所期望的)
{
other fields...,
"initialScanLevel":"5",
other fields...
}
最佳答案
我认为最简单的方法是使用自定义 StringEnumConverter
public class MyStringEnumConverter : Newtonsoft.Json.Converters.StringEnumConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value.Equals(InitialScanLevel.SystemDefault)) value = null;
base.WriteJson(writer, value, serializer);
}
}
[JsonConverter(typeof(MyStringEnumConverter))]
public enum InitialScanLevel
{
.....
}
关于c# - 如何使用 JSON.net 将枚举序列化为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041462/