c# - C#如何反序列化一个列表使用 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);
甚至可以使用 List 进行反序列化,但是在 中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());
您可以根据需要为不同类型的集合使用尽可能多的转换器。
推荐阅读
- python - 通过RESAMPLE检查用户留存的解决方案
- powerbi - Power BI 中的预测分析如何工作?
- hibernate - H2 数据库 Json 字段休眠转换器异常
- html - 如何从其中一个表行中获取数据
- excel - 将 Crashlytics(不是 Firebase)数据导出到 Excel
- visual-studio-code - 可视代码快捷键导航搜索侧边栏?
- spring-security - 求Spring Cloud数据流安全示例
- autodesk-forge - 关于modelderivative API中fragid的一致性
- javascript - 将标签文本值与 jquery 中的变量进行比较
- c++ - Why there is no output showing on my codeblocks?