我正在接收与以下类匹配的JSON消息:
public class Response
{
public int Code { get; }
public string Message { get; }
public string Result { get; }
}
但是Result
属性的值取决于我们在Code
中得到的内容,并且没有固定的结构。
例如如果Code = 1
,则Result将返回X类型的对象的列表;如果Code = 2
,则Result将返回Y类型的对象的列表。
当我尝试反序列化收到的消息时,将结果类型设置为string
似乎不起作用。
var responseObj = JsonConvert.DeserializeObject<Response>(response);
if (responseObj.Code == 1)
{
return responseObj.Result;
}
上面的return语句引发以下异常:
解析值[。时遇到意外字符。路径“结果”
如何定义我的类,以便它接收Result的整个文本,以后可以决定对其进行反序列化?因为我所有的请求都以上述结构响应,所以我想从同一位置管理所有这些请求。
答案 0 :(得分:1)
如何定义我的类,以便它接收Result的整个文本,以后可以决定对其进行反序列化?
如果要这样做,则将Result
属性设置为JToken
,而不是string
,如下所示。您还需要将setter添加到Response
类中显示的所有属性中,以允许反序列化正常工作:您不能反序列化为只读属性。
public class Response
{
public int Code { get; set; }
public string Message { get; set; }
public JToken Result { get; set; }
}
一旦您知道应该将Result
转换为哪种类型,就可以使用ToObject()
方法来实现。例如:
Response responseObj = JsonConvert.DeserializeObject<Response>(response);
if (responseObj.Code == 1)
{
var listOfX = responseObj.Result.ToObject<List<X>>();
...
}