将大型对象列表转换为子对象列表

时间:2019-07-30 06:55:44

标签: c# list

我有一个很大的Alarm对象列表,其中包含许多用于内部计算的字段。我的Web API的用户只需要它们通过JSON调用转换的计算值(但有完整的警报对象),例如(省略错误检查代码):

string apiAddress = "api/Alarms/getDigitalAlarms";
HttpResponseMessage response = await DAServer.GetAsync(apiAddress);
string result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<List<Alarm>>(result);

在其末尾定义的Alarm类仅具有所需的字段,其属性名称和数据类型与在我末尾定义的相同。

当我们检查以json格式生成的网络流量时,它包含完整的警报对象,包括每个Alarm对象的内部子对象(总计1500多个警报)。多余的信息被上面的JsonConvert.DeserializeObject调用丢弃并从不使用,但是为什么首先会产生如此多的不必要流量呢?

在返回列表之前,是否存在一种“快速方法”将大型警报对象转换为MiniAlarm对象(与用户端具有相同的骨架)?更快,因为每秒都会进行一次对API的调用,以查看是否引发了警报。

1 个答案:

答案 0 :(得分:2)

您可以创建一个MiniAlarm类,其构造函数将Alarm作为参数,然后使用LINQ和投影,如下所示:

var result = myAlarms.Select(x=> new MiniAlarm(x)).ToList();

或者,您可以在.NET上查看ODATA-我以前使用过它,并且效果很好。

如果这是唯一的序列化操作,您当然也可以在类[JsonIgnore]上不需要的成员上添加Alarm标记。