【发布时间】:2014-05-29 16:40:55
【问题描述】:
我正在使用 Json.Net,我想反序列化一个如下所示的 json 列表:
[
{ "name":"blabla", "price":"50" },
{ "name":"blabla", "price":"50" },
...
]
所以我已经完成了
List<PriceItem> list = JsonConvert.DeserializeObject<List<PriceItem>>(json, new DictionnaryJsonConverter());
但我只想反序列化此行中具有某些名称的项目,基本上有一个函数isNameValid(string name),如果返回 true,则将项目放入列表中,如果 false 则删除它。
我可以在第二次读取中进行计算,但我需要对这个函数有良好的性能。
我尝试过像这样自定义 JsonConverter,但我不知道如何编写 List ReadJson 函数
public class CustomJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
if (objectType == typeof(PriceItem))
{
return true;
}
else if (objectType == typeof(List<PriceItem>))
{
return true;
}
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
Object obj = new Object();
if (objectType == typeof(PriceItem) )
{
obj = new PriceItem();
((PriceItem)obj).Name = reader.ReadAsString();
((PriceItem)obj).Price = reader.ReadAsString();
}
else if (objectType == typeof(List<PriceItem>))
{
// ?????
}
return obj;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
【问题讨论】:
-
我也见过 JsonSerializer.Populate() 不知道如何以不同的方式使用它