Newtonsoft JSON反序列化

时间:2013-06-11 07:36:48

标签: c# json.net deserialization

我的JSON如下:

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

我找到了针对C#的Newtonsoft JSON.NET反序列化库。我尝试使用它如下:

object JsonDe = JsonConvert.DeserializeObject(Json); 

如何访问JsonDe对象以获取所有“类型”数据?我尝试了一个循环,但它没有工作,因为该对象没有枚举器。

4 个答案:

答案 0 :(得分:123)

您可以实现一个包含JSON

中字段的类
class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

然后使用DeserializeObject的通用版本:

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

文档:Serializing and Deserializing JSON

答案 1 :(得分:76)

更简单的解决方案:使用动态类型

从Json.NET 4.0 Release 1开始,支持原生dynamic。 您不需要申报课程,只需使用dynamic

dynamic jsonDe = JsonConvert.DeserializeObject(json);

所有字段均可用:

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

使用dynamic,您无需创建特定的类来保存数据。

答案 2 :(得分:8)

根据Newtonsoft Documentation,你也可以反序列化为这样的匿名对象:

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James

答案 3 :(得分:1)

//Your snippet
object JsonDe = JsonConvert.DeserializeObject(Json);

//what you need to do
JObject JsonDe = JsonConvert.DeserializeObject<JObject>(Json);

现在您拥有了具有合适属性和方法的对象来处理数据。

您也可以使用 Dictionary 代替 JObject。但是,还有其他替代方案,尽管是强类型。

NewtonSoft.Json 是一个优秀的库。我已经将它用于许多用例。

json 的美妙之处在于可以动态创建模式。因此我们需要能够编写通用代码来使用它们