有没有办法将JSON内容反序列化为C#4动态类型?为了使用DataContractJsonSerializer,跳过创建一堆类会很不错.
我在JSON中有一个简单的键/值列表,通过POST发送回ASP.NET.例:
{ "key1": "value1", "key2": "value2"}
Run Code Online (Sandbox Code Playgroud)
我并没有想要进入强大的.NET对象
我只需要一个普通的旧的Dictionary(Of String,String),或者一些等价的(hash table,Dictionary(Of String,Object),old-school StringDictionary - hell,一个2-D字符串数组对我有用.
我可以使用ASP.NET 3.5中的任何可用内容,以及流行的Json.NET(我已经将其用于序列化到客户端).
显然,这些JSON库都没有开箱即用的明显功能 - 它们完全专注于通过强大的合同进行基于反射的反序列化.
有任何想法吗?
限制:
是否可以使用json.net从json反序列化返回动态对象?我想做这样的事情:
dynamic jsonResponse = JsonConvert.Deserialize(json);
Console.WriteLine(jsonResponse.message);
Run Code Online (Sandbox Code Playgroud) 从 API 调用的结果来看,我有大量的 JSON 需要处理。
我目前有这个
Object convertObj = JsonConvert.DeserializeObject(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
我知道我可以做类似的事情
Movie m = JsonConvert.DeserializeObject<Movie>(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
m.FieldName
m.AnotherField
//etc
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做类似的事情
var itemName = convertObj["Name"];
Run Code Online (Sandbox Code Playgroud)
获取列表中第一项的第一个 Name 值。
这是可能的,还是我必须创建一个类来反序列化?
我不想创建类的原因是我不是 API 的所有者,并且字段结构可能会改变。
编辑。
好的,所以我创建了这个类,因为它似乎是最好的方法,但是有没有办法将 JSON 反序列化为列表?
var sessionScans = new List<SessionScan>();
sessionScans = JsonConvert.DeserializeObject<SessionScan>(responseFromServer);
Run Code Online (Sandbox Code Playgroud)
抱怨它无法将 SessionScan 转换为通用列表。