我有一个很大的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的调用,以查看是否引发了警报。
答案 0 :(得分:2)
您可以创建一个MiniAlarm
类,其构造函数将Alarm
作为参数,然后使用LINQ和投影,如下所示:
var result = myAlarms.Select(x=> new MiniAlarm(x)).ToList();
或者,您可以在.NET上查看ODATA-我以前使用过它,并且效果很好。
如果这是唯一的序列化操作,您当然也可以在类[JsonIgnore]
上不需要的成员上添加Alarm
标记。