2013-11-02 264 views
0

有什麼方法可以設置空值的默認表示應該在Json.NET? 更具體地說,數組內的空值。更改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。

+4

沒有,因爲'{ 「數據」:1 ,, 「一」]}'是不是一個有效的JSON。 –

+0

你爲什麼要這麼做?結果是無效的JSON。如果您是生成JSON的庫的作者,是否會包含一個選項,使您的庫無法正確工作? – Jon

+0

這不是有效的JSON - 你爲什麼要這樣看? – Cubic

回答

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());