我正在尝试对我的结构体进行序列化,以便未设置值的字符串会得到默认值""而不是null。
[JsonProperty(PropertyName = "myProperty", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string MyProperty{ get; set; }
我的JSON字符串中的结果:
"myProperty": null,
我想要什么
"myProperty": "",
我还尝试创建一个转换器,但没有效果,因为某些原因Can Convert和WriteJson函数甚至都没有触发:
[JsonProperty(PropertyName = "myProperty")]
[JsonConverter(typeof(NullToEmptyStringConverter))]
public string MyProperty{ get; set; }
class NullToEmptyStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(object[]);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
writer.WriteValue("");
}
}
这也没有帮助 Json.Net如何将null反序列化为空字符串?
DefaultValue
属性的作用并不是为属性赋予默认值。它只是作为序列化的信号,如果在序列化时该属性具有该值,则无需序列化,因为它将通过默认方式获得该值。如果您实际上没有为该属性提供默认值,那么您实际上正在滥用该属性。 - Lasse V. Karlsen