C# 在将字符串反序列化到类列表时,如何根据条件忽略某些记录

C# 在将字符串反序列化到类列表时,如何根据条件忽略某些记录,c#,json,json.net,C#,Json,Json.net,下面是我的班级: public class Categories { public List<Categories> Subcategories { get; set; } public List<Locations> Locations { get; set; } } public class Locations { public List<Coordinates> Coordinates { get; set;

下面是我的班级:

public class Categories
{
    public List<Categories> Subcategories { get; set; }         
    public List<Locations> Locations { get; set; }
}

public class Locations
{
    public List<Coordinates> Coordinates { get; set; }
}

public class Coordinates
{
    public int Id { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
}
我收到1个json字符串,我正在反序列化,如下所示:

[0] : Id:0
      X:0
      Y:0

[1] : Id:1
      X:100
      Y:200

[2] : Id:2
      X:300
      Y:400
var data = JsonConvert.DeserializeObject<List<Categories>>(json);
var data=JsonConvert.DeserializeObject(json);
现在我要做的是,在反序列化类别列表中的json时,忽略Id值为0的坐标中的记录


我知道我可以循环这个数据,然后从
Id==0
的坐标中删除记录,但我试图避免这个循环,并且想知道在将字符串反序列化到类中时有什么方法可以实现这一点?

如果您有兴趣知道另一种方法,那么是的。您可以从
JsonConvert
类继承,并通过重写
WriteJson
ReadJson
方法提供自己的序列化和反序列化实现。这没有什么困难,所以我把实现交给你

样本:


然而,若只是为了过滤特定ID的记录,那个么。一旦反序列化了JSON数据,就进行过滤。LINQ有一个单行程序解决方案。请不要循环:)

使用JSON.NET可能无法做到这一点。您可以循环并删除(这会使代码变得丑陋)或使用LINQ。我这里没有VS,但我想类似的东西可以完成这项工作(而且似乎您试图序列化的是json var,所以):json=json.Where(x=>x.Locations.Where(y=>y.Coordidates.Id!=0)).ToList();为什么我会获得接近票和反对票。我问这个问题是因为我认为可能有办法做到这一点。所以问这个问题的目的是学习新事物。我可以用loop或linq轻松做到这一点。请不要让提问变得如此困难,所以:)我看到一个接近票,没有主题>问题寻求调试。。。原因,我必须说,这是无效的投票。这篇文章没有什么不清楚的地方,也没有离题。我和你在一起@Learning@niksofteng非常感谢您的理解。您知道,有时我很难决定是否发布一些问题:)感谢您为帮助我所做的努力,但我应该在哪里写作;逻辑(其中Id==0)??(在WriteJson方法中)我建议您查看Google,特别是“custom+jsonconverter+newtonsoft”,您会发现大量链接。我敢肯定。这将帮助您更好地学习。@Learning-您为什么要编写
WriteJson()
方法?您不是要求在读取过程中跳过某些数组条目吗?只需重写
CanWrite
并返回false,如图所示。@dbc但如何在CanWrite方法中指定坐标条件(其中Id==0)?@Learning
WriteJson
是序列化过程中使用的自描述性方法名,即object>json。您对反序列化、json>对象感兴趣,因此
ReadJson
是您需要的。