相关疑难解决方法(0)

Json转换空字符串而不是null

我正在尝试序列化我的结构,以便没有获得值的字符串获取其默认值""而不是null

[JsonProperty(PropertyName = "myProperty", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string MyProperty{ get; set; }
Run Code Online (Sandbox Code Playgroud)

我在Json字符串中的结果:

"myProperty": null,
Run Code Online (Sandbox Code Playgroud)

我想要的是

"myProperty": "",
Run Code Online (Sandbox Code Playgroud)

我也试过创建一个没有任何影响的转换器,因为某种原因,转换和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("");
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# string null json

34
推荐指数
4
解决办法
5万
查看次数

如何强制为 null 值调用 JsonConverter.WriteJson()

我想用一些元数据将一些属性包装在 JSON 对象中,无论它是否为空。但是,JsonConverter.WriteJson如果属性为 ,则不会调用我的自定义覆盖null。

当属性不为空时我得到什么:

{"Prop":{"Version":1, "Object":{"Content":"abc"}}}
Run Code Online (Sandbox Code Playgroud)

当它为空时我得到什么:

{"Prop":null}
Run Code Online (Sandbox Code Playgroud)

当它为空时我想要什么:

{"Prop":{"Version":1, "Object":null}}
Run Code Online (Sandbox Code Playgroud)

由于WriteJson从未被要求提供空值,我没有机会控制这种行为。有什么办法可以强制这样做吗?

请注意,我想知道这是否可以与转换器或合约解析器等一起使用,我不能/不想更改MyContent或Wrap类(见下文)。

class VersioningJsonConverter : JsonConverter
{
    //Does not get called if value is null !!
    public override void WriteJson(JsonWriter writer, Object value, JsonSerializer serializer)
    {
        writer.WriteStartObject();
        writer.WritePropertyName("v");
        writer.WriteValue(1);
        writer.WritePropertyName("o");
        if(value == null)
        {
            //never happens
            writer.WriteNull();
        }
        else
        {
            writer.WriteStartObject();
            writer.WritePropertyName("Content");
            writer.WriteValue((value as MyContent).Content);                
            writer.WriteEndObject();
        }
        writer.WriteEndObject();
    }
    public override Object ReadJson(JsonReader reader, Type objectType, …
Run Code Online (Sandbox Code Playgroud)

c# json.net

5
推荐指数
1
解决办法
4394
查看次数

标签 统计

c# ×2

json ×1

json.net ×1

null ×1

string ×1