我正在使用第三方REST API,其中一个字段(类型string)具有一组已知的值,我已enum在我的代码中建模.在StringEnumConverter如所描述的从JSON.NET正确串行化所有但这些值中的一个[EnumMemberAttribute]注释.特别是对于此字段,REST API将null值转换为第三方系统中的"系统默认值"; 但是,当JSON.NET序列化时,它使用成员名称而不是注释中描述的值.我知道我可以编写一个自定义转换器来处理这个,但我的问题是,如果有一种方法可以让它在没有一个的情况下工作,因为它只是null没有正确序列化的值?
将enum在我的代码我已经定义:
[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
}
Run Code Online (Sandbox Code Playgroud)
对于InitialScanLevel.SystemDefault生成的JSON(不是第三方API期望的)
{
other fields...,
"initialScanLevel":"SystemDefault",
other fields...
}
Run Code Online (Sandbox Code Playgroud)
但应该是
{
other fields...,
"initialScanLevel":null,
other fields...
}
Run Code Online (Sandbox Code Playgroud)
对于InitialScanLevel.DeepDiscovery生成的JSON(这是第三方API期望的)
{
other fields...,
"initialScanLevel":"5",
other fields...
}
Run Code Online (Sandbox Code Playgroud)
我认为简单的方法是使用自定义 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
{
.....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |