使用Json.net将json对象反序列化为动态对象

是否有可能使用json.net从json反序列化中返回动态对象? 我想要做这样的事情:

dynamic jsonResponse = JsonConvert.Deserialize(json);
Console.WriteLine(jsonResponse.message);

最新的json.net版本允许这样做:

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");

Console.WriteLine(d.number);
Console.WriteLine(d.str);
Console.WriteLine(d.array.Count);

输出:

 1000
 string
 6

这里的文档: 使用Json.NET的LINQ to JSON


从Json.NET 4.0第1版开始,就有本地的动态支持:

[Test]
public void DynamicDeserialization()
{
    dynamic jsonResponse = JsonConvert.DeserializeObject("{"message":"Hi"}");
    jsonResponse.Works = true;
    Console.WriteLine(jsonResponse.message); // Hi
    Console.WriteLine(jsonResponse.Works); // True
    Console.WriteLine(JsonConvert.SerializeObject(jsonResponse)); // {"message":"Hi","Works":true}
    Assert.That(jsonResponse, Is.InstanceOf<dynamic>());
    Assert.That(jsonResponse, Is.TypeOf<JObject>());
}

当然,获得当前版本的最好方法是通过NuGet。

更新(11/12/2014)以解决评论:

这工作非常好。 如果您在调试器中检查该类型,则会看到该值实际上是动态的。 基础类型是JObject 。 如果你想控制类型(比如指定ExpandoObject ,那就这样做。

在这里输入图像描述


如果你只是反序列化为动态,你会得到一个JObject。 你可以通过使用ExpandoObject来获得你想要的。

var converter = new ExpandoObjectConverter();    
dynamic message = JsonConvert.DeserializeObject<ExpandoObject>(jsonString, converter);
链接地址: http://www.djcxy.com/p/20067.html

上一篇: Deserialize json object into dynamic object using Json.net

下一篇: Regex to remove javascript double slash (//) style comments