在JSON.NET中更改默认空值

时间:2013-11-02 23:04:25

标签: c# json null json.net default

有没有办法设置空值的默认表示应该在Json.NET中? 更具体地说,是数组中的空值。

鉴于课程

public class Test
{
    public object[] data = new object[3] { 1, null, "a" };
}

然后这样做

Test t = new Test();
string json = JsonConvert.SerializeObject(t);

给出

{"data":[1,null,"a"]}

是否可以使它看起来像这样?

{"data":[1,,"a"]}

不使用string.Replace。

1 个答案:

答案 0 :(得分:0)

想出来。我必须实现一个自定义的JsonConverter。 正如其他人提到的那样,这不会产生有效/标准的Json。

public class ObjectCollectionConverter : 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)
    {
        object[] collection = (object[])value;
        writer.WriteStartArray();
        foreach (var item in collection)
        {
            if (item == null)
            {
                writer.WriteRawValue(""); // This procudes "nothing"
            }
            else
            {
                writer.WriteValue(item);
            }
        }
        writer.WriteEndArray();
    }
}

像这样使用

Test t = new Test();
string json = JsonConvert.SerializeObject(t, new ObjectCollectionConverter());