3 回答
TA贡献1860条经验 获得超8个赞
试试这个:
var obj = JsonConvert.DeserializeObject<List<Result>>(Json);
说明:如果 JSON 是数组,则 C# RootObject 必须从 List/IEnumerable 本身派生,或者将其反序列化为类型的列表/数组。
你可以转储你的RootObject
班级。如果您想使用该RootObject
类型,请使其派生自 List。但这不值得麻烦。
TA贡献1871条经验 获得超8个赞
您的 JSON 是一个异构数组,包含一个字符串和一个对象。没有一点帮助,这不会干净地反序列化为强类型的类结构。一种可能的解决方案是使用这样的自定义JsonConverter:
public class ResultConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Result);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray array = JArray.Load(reader);
Result result = new Result
{
String = array[0].Value<string>(),
cm = array[1].ToObject<CodeMsg>(serializer)
};
return result;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后使用如下属性将转换器绑定到您的Result类:[JsonConverter]
[JsonConverter(typeof(ResultConverter))]
public class Result
{
public string String { get; set; }
public CodeMsg cm { get; set; }
}
最后,将 JSON 反序列化到Result类中,如下所示:
var result = JsonConvert.DeserializeObject<Result>(Json);
工作演示:https ://dotnetfiddle.net/RLpm5W
注意:您可以删除RootObject班级;这里不需要。
TA贡献1886条经验 获得超2个赞
请确保您的 json 字符串必须具有与 JsonHolder 类相同的属性。
public class JsonHolder
{
public string Id {get;set;}
public string Name {get;set;}
public string Gender {get;set;}
}
var jsonHolderList = new JsonConvert.DeserializeObject<List<JsonHolder>>(jsonString);
var jsonHolder = jsonHolderList.Single()
您还可以将 json 字符串转换为 c# 对象作为动态对象。请确保您的 json 字符串必须具有与 JsonHolder 类相同的属性。
dynamic obj= new JsonConver.DeserializeObject<List<JsonHolder>>(StrJson);
- 3 回答
- 0 关注
- 179 浏览
添加回答
举报