[英]C# How can I deserialize a List<T> with condition using Newtonsoft.Json
I have this classes:我有这个课程:
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; }
}
I know that I can deserialize using JsonConvert.DeserializeObject<T>(myObject);
我知道我可以使用
JsonConvert.DeserializeObject<T>(myObject);
反序列化even Lists, but in Class2
, I'd like to know how to filter if Id > 0 .甚至是列表,但在
Class2
中,我想知道如何过滤Id > 0 。
For example, I'd like to get this result:例如,我想得到这个结果:
{
"id":5,
"name":"test",
"details":[
{
"id":1,
"data1":0.25
}
]
}
Instead of:代替:
{
"id":5,
"name":"test",
"details":[
{
"id":12,
"data1":0.25
},
{
"id":0,
"data1":0.0
},
]
}
You can use Custom JsonConverter您可以使用自定义 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());
}
}
Read code阅读代码
var json = File.ReadAllText("test.json");
var сTest = JsonConvert.DeserializeObject<CTest>(json, new ListClass2Converter());
Write code编写代码
var json = JsonConvert.SerializeObject(
cTest, Formatting.Indented, new ListClass2Converter());
You can use as many converters for different types of collections as you need.您可以根据需要为不同类型的 collections 使用尽可能多的转换器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.