2016-12-21 111 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))]' –