[英]C# How can I deserialize a List<T> with condition using Newtonsoft.Json
我有這個課程:
public class CTest
{
public int Id { get; set; }
public string Name { get; set; }
public List<Class2> Details { get; set; }
}
public class Class2
{
public int Id { get; set; }
public int Data1 { get; set; }
}
我知道我可以使用JsonConvert.DeserializeObject<T>(myObject);
反序列化甚至是列表,但在Class2
中,我想知道如何過濾Id > 0 。
例如,我想得到這個結果:
{
"id":5,
"name":"test",
"details":[
{
"id":1,
"data1":0.25
}
]
}
代替:
{
"id":5,
"name":"test",
"details":[
{
"id":12,
"data1":0.25
},
{
"id":0,
"data1":0.0
},
]
}
您可以使用自定義 JsonConverter
class ListClass2Converter : JsonConverter<List<Class2>>
{
public override List<Class2> ReadJson(JsonReader reader, Type objectType,
[AllowNull] List<Class2> existingValue, bool hasExistingValue,
JsonSerializer serializer)
{
var list = new List<Class2>();
while (reader.Read() && reader.TokenType != JsonToken.EndArray)
{
if (reader.TokenType == JsonToken.StartObject)
{
var item = serializer.Deserialize<Class2>(reader);
if (item.Id != 0)
list.Add(item);
}
}
return list;
}
public override void WriteJson(JsonWriter writer, [AllowNull] List<Class2> value,
JsonSerializer serializer)
{
serializer.Serialize(writer, ((List<Class2>)value).Where(c => c.Id != 0).ToArray());
}
}
閱讀代碼
var json = File.ReadAllText("test.json");
var сTest = JsonConvert.DeserializeObject<CTest>(json, new ListClass2Converter());
編寫代碼
var json = JsonConvert.SerializeObject(
cTest, Formatting.Indented, new ListClass2Converter());
您可以根據需要為不同類型的 collections 使用盡可能多的轉換器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.