C#如何反序列化列表<;T>;使用Newtonsoft.Json的条件
我有以下课程:C#如何反序列化列表<;T>;使用Newtonsoft.Json的条件,c#,json.net,json-deserialization,C#,Json.net,Json Deserialization,我有以下课程: 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; } } 而不是: { "
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; }
}
而不是:
{
"id":5,
"name":"test",
"details":[
{
"id":12,
"data1":0.25
},
{
"id":0,
"data1":0.0
},
]
}
你可以用
您可以根据需要为不同类型的集合使用尽可能多的转换器。是否可以先反序列化然后过滤?但我收到一个对象,必须序列化和反序列化,但有时我需要检查是否应该在列表上序列化该类(例如,它可能是一个包含200个类的列表,但如果我对其进行条件设置,则必须返回一个仅包含10个类的列表)有些类有很多属性。所以你想要一个解决方案,对不同类型的不同列表对象过滤id>0的所有对象?不一定是那个条件,但任何其他条件。但是JsonConverter允许我创建我需要的条件。谢谢!这正是我一直在寻找的,现在我要把它应用到我需要的类中我需要它。
{
"id":5,
"name":"test",
"details":[
{
"id":12,
"data1":0.25
},
{
"id":0,
"data1":0.0
},
]
}
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());