我有这个json字符串,它包含两个元素,每个元素都有一个Number和一个Status:
var jsonString = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";
如您所见,它有一个名为错误的父属性。
我准备了这个模型:
public class ExceptionStructure
{
public int Number { get; set; }
public string Status { get; set; }
}
使用NewtonSoft.Json我想将json字符串反序列化为 ExceptionStructure 对象的数组,而不必为父属性创建模型(因为我不需要它)
我可以这样做(可能在模型类中有一些json属性)吗?
我希望做这样的事情来反序列化:
var exceptionArr = JsonConvert.DeserializeObject<ExceptionStructure>(jsonString);
答案 0 :(得分:1)
JSON.NET允许您反序列化json文件的各个部分。您可以通过首先将json字符串反序列化为JObject,提取相关部分,然后将它们反序列化为实际对象来实现此目的。
JObject errors = JObject.Parse(jsonString);
IList<JToken> results = errors["Errors"].Children().ToList();
IList<ExceptionStructure> exceptions = new List<ExceptionStructure>();
foreach (JToken result in results)
{
ExceptionStructure exception= result.ToObject<ExceptionStructure>();
exceptions.Add(exception);
}
老实说,在你的情况下,建立一个Errors父类
可能更容易可在http://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm
找到更多信息答案 1 :(得分:1)
这可能会对您有所帮助。
string s = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";
var jobj = JObject.Parse(s);
List<ExceptionStructure> list = jobj["Errors"].ToObject<List<ExceptionStructure>>();
OR:
string s = "{\"Errors\":[{\"Number\":9,\"Status\":\"BadRequest\"}, {\"Number\":3,\"Status\":\"BadConnection\"}]}";
List<ExceptionStructure> list = JObject.Parse(s)
.SelectToken("Errors")
.ToObject<List<ExceptionStructure>>();