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

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

当前回答

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

var converter = new ExpandoObjectConverter();    
dynamic message = JsonConvert.DeserializeObject<ExpandoObject>(jsonString, converter);

其他回答

是的,这是可能的。我一直都在做这件事。

dynamic Obj = JsonConvert.DeserializeObject(<your json string>);

对于非本地类型来说有点棘手。假设在你的Obj中,有一个ClassA和ClassB对象。它们都被转换为JObject。你需要做的是:

ClassA ObjA = Obj.ObjA.ToObject<ClassA>();
ClassB ObjB = Obj.ObjB.ToObject<ClassB>();

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

这里的文档:LINQ to JSON with JSON。网

参见JObject。解析和JArray。解析

我知道这是旧的帖子,但JsonConvert实际上有一个不同的方法,所以它会

var product = new { Name = "", Price = 0 };
var jsonResponse = JsonConvert.DeserializeAnonymousType(json, product);

注意:当我在2010年回答这个问题时,没有某种类型就无法反序列化,这允许你在不定义实际类的情况下进行反序列化,并允许使用匿名类来进行反序列化。


你需要有某种类型来反序列化。你可以这样做:

var product = new { Name = "", Price = 0 };
dynamic jsonResponse = JsonConvert.Deserialize(json, product.GetType());

我的答案是基于。net 4.0在JSON序列化器中构建的解决方案。反序列化为匿名类型的链接在这里:

http://blogs.msdn.com/b/alexghi/archive/2008/12/22/using-anonymous-types-to-deserialize-json-data.aspx

是的,你可以使用JsonConvert.DeserializeObject。要做到这一点,只需简单地做:

dynamic jsonResponse = JsonConvert.DeserializeObject(json);
Console.WriteLine(jsonResponse["message"]);