我有一个 JSON 字符串,我正在尝试将其反序列化为以下类的列表:
public class Selection
{
public Int64 id { get; set; }
public bool view { get; set; }
public bool edit { get; set; }
public bool broad { get; set; }
}
这是我得到的 JSON 字符串:
[
[
{"name":"id", "value":0},
{"name":"view", "value":true},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":true},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":true},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
],
[
{"name":"id", "value":0},
{"name":"view", "value":false},
{"name":"edit", "value":false},
{"name":"broad", "value":false}
]
]
这就是我调用反序列化的方式:
var selection = JsonConvert.DeserializeObject<List<Selection>>(param.selection);
但是我收到了这个错误:
我需要另一种格式吗?
最佳答案
您收到此错误是因为 JSON 的形状与您尝试反序列化的结构不匹配。您的 JSON 表示一组名称-值对对象数组,但您正试图反序列化为 List<Selection>
。 .要反序列化到您定义的类中,您需要使用自定义 JsonConverter
像这样:
public class SelectionConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Selection);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = new JObject(
JArray.Load(reader)
.Children<JObject>()
.Select(jo => new JProperty((string)jo["name"], jo["value"]))
);
var selection = new Selection();
serializer.Populate(obj.CreateReader(), selection);
return selection;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后,你可以这样反序列化:
var selection = JsonConvert.DeserializeObject<List<Selection>>(param.selection, new SelectionConverter());
fiddle :https://dotnetfiddle.net/pgAvUA
关于c# - 如何将名称-值对数组的 JSON 数组反序列化为 List<MyClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078821/