我创建了一个通用的反序列化方法,我将json字符串传递给它。 T是我想要返回的类型。
private static T Deserialize<T>(string input)
{
try
{
var result = JsonConvert.DeserializeObject<T>(input);
return result;
}
catch (JsonSerializationException ex)
{
var errorResult = JsonConvert.DeserializeObject<Dictionary<string, string>>(input);
var errorMessage = errorResult["error"];
throw new ApplicationException(errorMessage, ex);
}
}
所以要调用我们选择的方法
Deserialize<MyObject>(jsonString)
成功返回类型为MyObject
的对象。
但是,如果出现问题,传入的json有时可能包含错误消息(错误:消息)。
在这种情况下我想要做的是导致JsonSerializationException并读取错误消息。
但是,没有抛出这样的错误,并且MyObject被撤销,但是所有的null和零值都是。
错误json
"{\"error\":\"Error message"}"
其他json
"[{\"path\":\"\",\"id\":2000,\"name\":\"Name1\"},{\"path\":\"\",\"id\":2001,\"name\":\"Name2\"},{\"path\":\"\",\"id\":2002,\"name\":\"Name3\"}]"
另一个json可以是几乎任何格式 - 但重点是所需的Type被传递给方法,这应该返回或应该抛出异常。
答案 0 :(得分:2)
没有JsonSerializationException,因为Json格式良好但没有属性与类型T的属性匹配。所以结果是一个新的T对象。
我想说下面的代码应该有效:
//First, convert to JToken
var o = JsonConvert.DeserializeObject<JToken>(input);
//Then check if the property error exists
if(!(o is JArray) && o["error"] != null);
{
throw new Exception(...)
}
//Finally convert the object
return o.ToObject<T>();