我需要将和对象序列化为JSON,以将有效负载传递给Python脚本。C#中具有null
值的属性应该在JSON中具有None
值,传递给Python才能工作。我创建了一个JsonConverter来检查值是否为null
,并写入None
。但是,它永远不会被调用。由于可以为null的属性之一是字符串类型(其他可以为float?,int?,等等)我还创建了一个JsonConverter:
public class NullJsonConverter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var jsonString = reader.GetString();
if (!string.IsNullOrEmpty(jsonString))
{
return JsonSerializer.Deserialize<string>(jsonString, options);
}
return null;
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
{
if (value == null)
{
//Logic to convert from null to None
}
JsonSerializer.Serialize(writer, value);
}
}
字符串
但是,当我序列化一个包含string
类型属性的对象时,只有当属性有值时才调用转换器。
以下是我在序列化中使用的选项:
return new JsonSerializerOptions()
{
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
WriteIndented = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Converters =
{
new JsonStringEnumConverter(),
new NullJsonConverter()
}
};
型
我错过了什么?我如何在C#和object中序列化,使null属性在JSON中反映为None,并且当反序列化返回时转换回null?
1条答案
按热度按时间kzmpq1sx1#
尝试覆盖
HandleNull
属性并将其设置为true
。就像本期中所描述的:https://github.com/dotnet/runtime/issues/44006#issuecomment-719002484字符串