我得到了一个json,反序列化可以是任何一个班级的说法:
问题
答案
所以我需要根据json所属的类进行切换。
目前我正在使用它来反序列化。但问题是,如果我使用它,我会预测我会收到什么类型。
Question question = new JavaScriptSerializer().Deserialize<Question>(payload);
但我想这样做:
var jsonType = ParseJson(payload);
switch (jsonType)
{
case Question: {Question question = new JavaScriptSerializer().Deserialize<Question>(payload); break;}
case Answer: ...
case Comment: ...
}
答案 0 :(得分:1)
这可能非常棘手。如果有&#34;类型&#34;包含值&#34;问题&#34;,&#34;答案&#34;或&#34;评论&#34;的字段,您可以打开它。如果没有,您必须打开其他内容并将其用作隐式标记。如果/当某些事情发生变化时,这可能是危险的。
无论如何,您可以尝试使用Newtonsoft JSON.NET,特别是JObject
TryGetValue
(我不知道微软是否有相应的内容)。 s JavaScriptSerializer
):
var jsonString = "{ \"foo\" : \"bar\" }";
var obj = JObject.Parse(jsonString);
if(obj.TryGetValue("foo", out JToken val1))
{
Console.Write("Foo is in there!");
}
在该示例中,val1
包含&#34; bar&#34;的值。
答案 1 :(得分:0)
我建议使用JSON.NET
代替JavaScriptSerializer
。
如果ParseJSON
返回类型为Question
,Answer
和...的对象,则可以使用以下解决方法:
var jsonType = ParseJson(payload);
switch (jsonType.GetType().FullName)
{
case "YourAssembly.Question": {Question question = new JavaScriptSerializer().Deserialize<Question>(payload); break;}
case "YourAssembly.Answer": ...
case "YourAssembly.Comment": ...
}