使用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