我有这个json结构:
[{"trace":{"details":{"date":"[28-02-2016 11:04:26.856573]","type":"[info]","message":"[system done.]"},"context":{"context":[[{"ID":"john dillinger"}]]}}},{"trace":{"details":{"date":"[28-02-2016 11:04:26.856728]","type":"[info]","message":"[trace done.]"},"context":{"context":[[{"ID":"john dillinger"}]]}}}]
Run Code Online (Sandbox Code Playgroud)
我可以使用这个类正确地反序列化它:
public class Trace
{
public TraceValue trace;
}
public class TraceValue
{
public Details details;
public Context context;
}
public class Details
{
public String date;
public String type;
public String message;
}
public class Context
{
public List<List<IdItem>> context;
}
public class IdItem
{
public String ID;
}
Run Code Online (Sandbox Code Playgroud)
反序列化的一个例子:
var response = "json above";
var obj = JsonConvert.DeserializeObject<List<Trace>>(response);
Run Code Online (Sandbox Code Playgroud)
现在问题是有时json返回这个结构:
{
"success": false,
"message": "No content."
}
Run Code Online (Sandbox Code Playgroud)
我的代码出错了,因为结构不同.我试图读取标题,但返回为200'因为没有错误发生.那么如何识别不同的结构并避免json异常呢?这是管理不同json结构的类:
public class RootObject
{
public bool success { get; set; }
public string message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以在异常中做到这一点,但这不是一个好习惯,还有另外一种方法吗?
在像你这样的情况下,最好首先获取一个JToken,然后检查它是否具有message属性并反序列化为正确的对象:
var container = (JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(response);
var message = container["message"];
if(message == null)
{
var obj = container.ToObject<List<Trace>>();
//Do whatever you need to do with the object
}
else
{
var msg = container.ToObject<RootObject>();
//Do whatever you need to do with the object
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |