2016-12-21 109 views
1

我有一個通過Java使用GSON生成的JSON。我想在C#中重新創建相同的字段。 JSON看起來像這樣。反序列化一個GSON生成的JSON字符串n C#

{ 
    "bool1": true, 
    "long1": 0, 
    "double1": 500.0, 
    "int1": 1, 
    "double2": 0.4, 
    "double3": 0.3, 
    "double4": 1.0, 
    "double5": 0.1, 
    "int2": 0, 
    "int3": 0, 
    "long2": 20160901, 
    "class1object1": { 
     "serialVersionUID": 1, 
     "class1int1": 0, 
     "class1int2": 0, 
     "class1int3": 0, 
     "class1double1": 68.3, 
     "class1doubleArray1": [68.3], 
     "class1double2": 65.45, 
     "class1doubleArray2": [65.45], 
     "class1int4": 1 
    }, 
    "class1object2": { 
     "serialVersionUID": 1, 
     "class1int1": 135, 
     "class1int2": 138, 
     "class1int3": 105, 
     "class1double1": 68.1, 
     "class1doubleArray1": [67.57, 67.6, 67.48, 67.45, 67.39, 67.42, 67.38, 67.37, 67.35, 67.35, 67.37, 67.35, 67.36, 67.37, 67.35, 67.37, 67.38], 
     "class1double2": 67.26, 
     "class1doubleArray2": [67.5, 67.53, 67.46, 67.4, 67.39, 67.38, 67.37, 67.32, 67.33, 67.33, 67.33, 67.35, 67.36, 67.33, 67.33, 67.37, 67.34], 
     "class1int4": 240 
    }, 
    "int4": 1, 
    "class2object1": { 
     "serialVersionUID": 1, 
     "class2double1": 2.8499999999999943, 
     "class2double2": 1.6758422688703467, 
     "class2double3": 0.09523809523809523 
    }, 
} 

所有這些類和其他字段的定義已經存在於我的C#應用​​程序中。此外,如果需要,字段的名稱可以保持與JSON中的相同。

有人可以幫助我使用什麼工具來實現這個目標以及如何實現?另外還有NaN/Inf值的可能性(次要問題,不是很重要,如果需要可以從JSON中省略)

+0

請使用此鏈接:http://json2csharp.com/ – Saadi

+1

您可以使用[Json2csharp(HTTP:// json2csharp .com /)自動生成你的clasess和[JsonNET](http://www.newtonsoft.com/json)來反序列化 – Pikoh

回答

1

您可以使用JSON2CSHARP或將json複製到剪貼板>轉到Visual Studio>編輯>粘貼。特別>粘貼JSON作爲類這是給你的模型類Uisng Newtonsoft.Json包,你可以反序列化JSON:

JsonConvert.DeserializeObject<RootClassName>("json"); 

模型類應該是:

public class Class1 
{ 
    public int serialVersionUID { get; set; } 
    public int class1int1 { get; set; } 
    public int class1int2 { get; set; } 
    public int class1int3 { get; set; } 
    public double class1double1 { get; set; } 
    public List<double> class1doubleArray1 { get; set; } 
    public double class1double2 { get; set; } 
    public List<double> class1doubleArray2 { get; set; } 
    public int class1int4 { get; set; } 
} 

public class Class2 
{ 
    public int serialVersionUID { get; set; } 
    public int class1int1 { get; set; } 
    public int class1int2 { get; set; } 
    public int class1int3 { get; set; } 
    public double class1double1 { get; set; } 
    public List<double> class1doubleArray1 { get; set; } 
    public double class1double2 { get; set; } 
    public List<double> class1doubleArray2 { get; set; } 
    public int class1int4 { get; set; } 
} 

public class Class3 
{ 
    public int serialVersionUID { get; set; } 
    public double class2double1 { get; set; } 
    public double class2double2 { get; set; } 
    public double class2double3 { get; set; } 
} 

public class RootObject 
{ 
    public bool bool1 { get; set; } 
    public int long1 { get; set; } 
    public double double1 { get; set; } 
    public int int1 { get; set; } 
    public double double2 { get; set; } 
    public double double3 { get; set; } 
    public double double4 { get; set; } 
    public double double5 { get; set; } 
    public int int2 { get; set; } 
    public int int3 { get; set; } 
    public int long2 { get; set; } 
    public Class1 Class1 { get; set; } 
    public Class2 Class2 { get; set; } 
    public int int4 { get; set; } 
    public Class3 Class3 { get; set; } 
} 

另外如果你想用別人的名字C#類喲ü需要使用JsonProperty(PropertyName = "yourJsonName"),這允許您指定一個不同的名稱這個例子應該有所幫助:

public class Foo 
{ 
    [JsonProperty(PropertyName = "fooJSONname")] 
    public int FooNumber { get; set; } 

} 
+0

有沒有一種方法可以指定我想在創建JSON時使用哪種數據類型GSON? – Smit

+0

我不知道這就是你的意思'[JsonConverter(typeof(datatype))]' –