2014-02-13 32 views
-2

以下代碼:JSON.Net Seralize值沒有引號

var json = JsonConvert.SerializeObject(fooObject, 
                new JsonSerializerSettings 
                 { 
                  NullValueHandling = NullValueHandling.Ignore, 

                 }); 

Seralizes的JSON(字符串)對象:

{ 「fooA」:0, 「 fooB「:0, 」fooC「:假, 」食品「:假, 」fooE「:0, 」fooF「:0, }

這些值不是用引號引起來的,如「fooA」:「0」。這是我想要的行爲。

有沒有辦法強制這種行爲?

+6

如果你希望它們被序列化爲字符串,然後讓他們字符串,而不是數字類型。 – Jon

+2

數字不需要用JSON括在引號中。你爲什麼需要他們? –

+0

推送到需要引號的API。如果讓他們成爲字符串是路要走,我會繼續前進並做出改變。謝謝你,喬恩。 –

回答

3

在JSON格式中,數字和布爾值在字符串周圍沒有引號,而字符串則是(請參閱JSON.org)。

如果你想周圍所有的圖元的報價,你有幾種選擇:

  1. 更改您的序列化是string類型的對象的屬性。
  2. 將您的值放入Dictionary<string, string>(或DTO),然後序列化。
  3. 定製JsonConverter進行轉換。此選項的優點是可以全局應用,因此您不必更改所有類。

前兩個選項是不言自明的。如果你選擇去同一個轉換器,代碼可能是這個樣子:

class PrimitiveToStringConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return objectType.IsPrimitive; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     writer.WriteValue(value.ToString().ToLower()); 
    } 

    public override bool CanRead 
    { 
     get { return false; } 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 
} 

要使用它,只需將轉換器的實例傳遞給JsonConvert.SerializeObject方法。

string json = JsonConvert.SerializeObject(foo, new PrimitiveToStringConverter()); 

演示:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Foo foo = new Foo 
     { 
      Int = 6, 
      Bool = true, 
      Float = 3.14159 
     }; 

     string json = JsonConvert.SerializeObject(foo, new PrimitiveToStringConverter()); 
     Console.WriteLine(json); 
    } 
} 

class Foo 
{ 
    public int Int { get; set; } 
    public bool Bool { get; set; } 
    public double Float { get; set; } 
} 

輸出:

{"Int":"6","Bool":"true","Float":"3.14159"} 
+0

您應該獲得* JsonConverter *徽章。看來你可以用它解決所有問題。 – EZI

+0

@QtX它們對解決古怪的JSON問題非常有用;毫無疑問! –