我有我的MVC Web服务:
public class PersonApiController : ApiController
{
[HttpGet]
public IEnumerable<Person> Get()
{
List<Person> lstPerson = new List<Person>() {
new Person(){Name="Rahul", Age =29, Sex = "M"},
new Person(){Name="Chinmoy", Age = 28, Sex = "M"},
new Person(){Name="Charu", Age = 27, Sex = "F"}
};
return lstPerson;
}
}
在客户端生成此XML:(327 char无空格)
<ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TestJson.Models">
<Person>
<Age>29</Age>
<Name>Rahul</Name>
<Sex>M</Sex>
</Person>
<Person>
<Age>28</Age>
<Name>Chinmoy</Name>
<Sex>M</Sex>
</Person>
<Person>
<Age>27</Age>
<Name>Charu</Name>
<Sex>F</Sex>
</Person>
</ArrayOfPerson>
我想在创建使用属性别名的减少版本(245没有空格或75%原始大小):
<ArrayOfP xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TestJson.Models">
<P>
<A>29</A>
<N>Rahul</N>
<S>M</S>
</P>
<P>
<A>28</A>
<N>Chinmoy</N>
<S>M</S>
</P>
<P>
<A>27</A>
<N>Charu</N>
<S>F</S>
</P>
</ArrayOfP>
我真的不知道那个工作是如何工作的。我的问题是当您处理更大的列表时会发生什么,尤其是在带宽减少的移动设备中思考。
a)MVC Web服务是否生成一些转换表或模式描述,而不是发送1000次字符串<age>
发送<a>
b)数字怎么样?他们以字节或字符串形式发送。特别适用于像lat / lon坐标一样的浮点数。两个坐标表示8个字节,但字符串类似于20个字节-67.051315, 9.988972
c)我希望MVC能为我做到这一点,否则我应该创建更多的简化版本并在客户端进行解析。当然这个版本很难阅读,但只有188个字符或57%的原始大小。
<ArrayOfP xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TestJson.Models">
<P>29|Rahul|M</P>
<P>28|Chinmoy|M</P>
<P>27|Charu|F</P>
</ArrayOfP>
d)有没有办法测量Json / Xml包的大小。如您所见,我只能测量作为字符串长度传输的数据。但这是为网络传输的字节大小吗?
答案 0 :(得分:2)
Web API服务将返回json或xml,具体取决于客户端的Accept标头。如果它&#34; text / xml&#34;,它将返回xml。如果是&#34; application / json&#34;,它将返回json。
通常xml未经过优化,但在这些情况下通常会使用zip / gzip进行压缩。请参阅您的服务器设置。它需要额外的CPU时间,但是如果你关心流量,你可以考虑这个选项。
数字以字符串形式发送。所有其他类型 - 取决于序列化程序(例如,二进制数据将序列化为base64字符串表示)。您可以创建自己的序列化程序并根据需要对其进行序列化。但请记住,如果您的客户端接受text / xml,将数字序列化为二进制数据可能是一种不好的做法。
总结:在服务器上使用gzip压缩。