JSON / XML是如何传输的?

时间:2015-02-03 18:41:45

标签: xml json asp.net-mvc

我有我的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包的大小。如您所见,我只能测量作为字符串长度传输的数据。但这是为网络传输的字节大小吗?

1 个答案:

答案 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压缩。