C# 将大型对象列表转换为子集对象列表
我有一个相当大的报警对象列表,其中有许多用于内部计算的字段。my Web API的用户只需要通过JSON调用转换的计算值(但需要完整的报警对象),例如(省略错误检查代码):C# 将大型对象列表转换为子集对象列表,c#,list,C#,List,我有一个相当大的报警对象列表,其中有许多用于内部计算的字段。my Web API的用户只需要通过JSON调用转换的计算值(但需要完整的报警对象),例如(省略错误检查代码): string apiAddress=“api/Alarms/getDigitalAlarms”; HttpResponseMessage response=等待DAServer.GetAsync(apiAddress); 字符串结果=wait response.Content.ReadAsStringAsync(); 返回J
string apiAddress=“api/Alarms/getDigitalAlarms”;
HttpResponseMessage response=等待DAServer.GetAsync(apiAddress);
字符串结果=wait response.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(结果);
在其末尾定义的Alarm类只有它们所需的字段,其属性名称和数据类型与在我的末尾定义的相同
当我们检查以json格式生成的网络流量时,它包含完整的报警对象,包括每个报警对象的内部子对象(总共超过1500个报警)。上面的JsonConvert.DeserializeObject调用丢弃了额外的信息,并且从未使用过这些信息,但是为什么要首先生成这么多不需要的流量呢
在返回列表之前,是否有“更快的方法”将我的大型报警对象转换为小型报警对象(与用户端具有相同的骨架)?更快,因为对API的调用每秒进行一次,以查看是否引发了某些报警。您可以创建一个带有构造函数的
MiniAlarm
类,该构造函数将报警
作为参数,然后使用LINQ和投影,如下所示:
var result = myAlarms.Select(x=> new MiniAlarm(x)).ToList();
或者,您可以在.NET上查看—我以前使用过它,而且效果很好
当然,如果这是唯一发生的序列化,您也可以在类
报警中不关心的成员上添加[JsonIgnore]
标记。您可以创建一个迷你报警类,该类的构造函数接受报警作为参数,然后使用LINQ和投影,如下所示:
var result = myAlarms.Select(x=> new MiniAlarm(x)).ToList();
或者,您可以在.NET上查看—我以前使用过它,而且效果很好
当然,如果这是唯一发生的序列化,您也可以在类中不关心的成员上添加一个[JsonIgnore]
标记。我说的可能是显而易见的,但您从错误的角度处理问题。似乎您正在使用web api,而不是请求所有警报,他们应该提供过滤方法(比如按日期),或者更好的方法是将它们推给您我所说的可能是显而易见的,但您从错误的角度处理问题。似乎您正在使用web api,而不是请求所有警报,他们应该提供过滤方法(比如按日期过滤),或者更好的方法是将它们推给您,这应该不会比像您现在这样序列化它们慢。可能更快。嗯。。。。让我试试这个,看看它是否比我的应用程序所能容忍的要耗费更多的时间。那是一堆!注意:序列化是在用户端进行的(即在收到我的响应后)。不知何故,我忽略了您答案的最后一部分。[JsonIgnore]就是诀窍:)我只是希望那些不需要的字段不要成为json输出的一部分!我不知道这个有用的标签。它节省了我所有的转换时间。为你竖起大拇指@Matt!这应该不会比像现在这样序列化它们慢。可能更快。嗯。。。。让我试试这个,看看它是否比我的应用程序所能容忍的要耗费更多的时间。那是一堆!注意:序列化是在用户端进行的(即在收到我的响应后)。不知何故,我忽略了您答案的最后一部分。[JsonIgnore]就是诀窍:)我只是希望那些不需要的字段不要成为json输出的一部分!我不知道这个有用的标签。它节省了我所有的转换时间。为你竖起大拇指@Matt!