The*_*oon 3 c# parsing json visual-studio deserialization
我有以下需要反序列化的Json字符串.
{"123456789":
{"short_description":"Delivered",
"detail_description":"Your item has been delivered"
}
}
Run Code Online (Sandbox Code Playgroud)
第一个字段"123456789"是一个id号,所以基本上这个值可能会有所不同,具体取决于被查询的数据.
我在visual studio中使用C#.显然因为第一个字段的值可以改变,所以我不能使用预定义的类来反序列化JSON,因为该字段将用作类名,但字段值与类名不匹配.
有没有办法将其反序列化为某种动态类但仍然访问字段,就好像它是一个预定义的类?
或者有没有办法将其反序列化为预定义的类,即使类名不匹配?
提供此数据的服务是第三方服务,因此我无法控制它.
这是我在生产代码中使用的一种方法.它可能不完美,但它完成了工作.
using using System.Web.Script.Serialization;
// .....
public object GetJson(string url)
{
var json = Get(url); // I have code that makes this work, it gets a JSON string
try
{
var deserializer = new JavaScriptSerializer();
var result = deserializer.DeserializeObject(json);
return result;
}
catch (ArgumentException e)
{
// Error handling....
}
}
Run Code Online (Sandbox Code Playgroud)
您收到的对象将是一个通用的Map,List或其他任何内容,具体取决于JSON的结构.如果您知道期望的结构,那么在不编写自定义解析器或目标对象类型的情况下,这非常有用.
然后,您可以枚举Map的键,例如,找到变化的键.然后,包装器或转换将为应用程序层的其余部分提供一致的API.就像是:
public class Order {
public string OrderNum { private set; get; }
public string ShortDesc { private set; get; }
public string Desc { private set; get; }
public static Order FromJson(object jsonResult)
{
var m = jsonResult as Map<string, object>;
// Handle errors, but I am not
var firstPair = m.First();
var detail = firstPair.Value as Map<string, object>;
var dummy = new Order()
{
OrderNum = firstPair.Key,
ShortDesc = detail["short_description"].ToString();
Desc = detail["detail_description"].ToString();
}
return dummy;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8254 次 |
| 最近记录: |