我试图反序列化一个json字符串,该字符串具有一个基于no的动态生成的属性名称(例如:0,1等)。在JSON模型中,使用Test属性名称来分配动态生成的onjects的值,并且我创建了一个自定义转换器来匹配数字并将其分配给Test属性。
问题是我不确定如何在列表中设置值,因为Test属性可以有多个相同类型的值。我希望结果在数组或列表中。
自定义转换器:
public class CustomPropertyNameConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsClass;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
object instance = objectType.GetConstructor(Type.EmptyTypes).Invoke(null);
PropertyInfo[] props = objectType.GetProperties();
JObject jo = JObject.Load(reader);
foreach (JProperty jp in jo.Properties())
{
string name = jp.Name;
//Match digits
if (Regex.IsMatch(name, "^[0-9]*$"))
{
name = "Test"; // Here i've assigned the property name that is defined in the Json Model
}
PropertyInfo prop = props.FirstOrDefault(pi => pi.CanWrite && string.Equals(pi.Name, name, StringComparison.OrdinalIgnoreCase));
if (prop != null)
//How to add it to List of Detail type??
prop.SetValue(instance, jp.Value.ToObject(prop.PropertyType, serializer));
}
return instance;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
模型
[JsonConverter(typeof(CustomPropertyNameConverter))]
public class Data
{
public int group_id { get; set; }
public Detail Test { get; set; } // Dynamic property name needs to be converted to List or Array
}
public class Detail
{
public string id { get; set; }
public string status { get; set; }
}
测试数据:
"data":
{
"group_id":2758,
"0":
{
"id": "1",
"status": "PASS"
},
"1":
{
"id": "2",
"status": "FAIL"
}
}