Sha*_*aun 9 c# serialization json.net
我从Java服务返回以下JSON
{"Test":{
"value": 1,
"message": "This is a test"
}}
Run Code Online (Sandbox Code Playgroud)
我有以下C#类
class Test {
public int value { get; set; }
public String message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,因为返回了根标签"Test",所以我无法直接反序列化
Test deserializedTest = JsonConvert.DeserializeObject<Test>(jsonString);
Run Code Online (Sandbox Code Playgroud)
我发现我必须将Test类包装在另一个类中才能使其工作.是否有一种简单的方法来避免这种情况
JToken root = JObject.Parse(jsonString);
JToken testToken = root["Test"];
Test deserializedTest = JsonConvert.DeserializeObject<Test>(testToken.toString());
Run Code Online (Sandbox Code Playgroud)
最后我还有第二个问题.我正在调用的大多数服务也可以返回一个Exception对象.我想我已经阅读了JSON的"root"标签来确定如何反序列化对象.如何获取第一个根标记和/或是否有更好,更优雅的方法来处理服务中的异常?
谢谢
有同样的问题,真的想摆脱这个“容器”,找到了这个解决方案,尽管你需要使用一个额外的字符串来找到根对象:
// Container I wanted to discard
public class TrackProfileResponse
{
[JsonProperty("response")]
public Response Response { get; set; }
}
// Code for discarding it
var jObject = JObject.Parse(s);
var jToken = jObject["response"];
var response = jToken.ToObject<Response>();
Run Code Online (Sandbox Code Playgroud)
如果您不想创建包装类型,可以使用匿名类型:
var test =
JsonConvert.DeserializeAnonymousType(response.Content, new { Test = new Test()}).Test;
Run Code Online (Sandbox Code Playgroud)
如果您有更多属性(例如异常),那么创建包装类型可能会更好。