C#中Serializable问题,用Postman提交json数据问题

浏览:61 发布时间:2020/1/10 11:47:51 返回


    以前对于要用于网络传输的对象,类名一般会加上[Serializable]特性,因为Serializable书本上的解释就是标识类可序列化,利于网络的传输。但是如果是多种语言,有差别,这个规则就不一定能统一得上。C#的可序列化对象,到Java里面怎么反序列化?当然如果是C#可以直接反序列化。

    最近就遇到一个很尴尬的问题,.Net中Web Api可以直接接收对象,也就是可以提交,返回自定义的类型,但是如果这个类型加上了Serializable就会出现下面的情况。

{
    "<Name>k__BackingField": "小明",
    "<Age>k__BackingField": 30
}

返回结果成了这样子,类是如下面

[Serializable]
    public class Myclass
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

用postman获取出来结果是上面的json格式,即使不用postman,用chrome用get方式获取出来也是上面json格式的字段,不是我们想像的 Name,Age比如清爽的json格式。但是如果把Serializable去掉,则返回数据正常。

    找了些Serializable的资料,总结起来应该这个是C#序列化的标记,对于C#的通信可以直接序列化反序列化,默认有二进制,xml两种序列化方式。而json这种格式的,可能就没有默认的,现在json这么通用,而且.net里面有默认序列化成json的方式,反而加上了serializable就影响这个默认的情况。

    当然有解决办法,如果是返回值,用Json显示方式序列化后再返回。最好的方式还是去掉。现在通信一般用json方式,现在的Newtown.json,json.Net,微软已经有很方便的json序列化的工具。在web  api应该去掉serializable,datacontract等以前的特性。

广告

昵称*:
邮箱:
评论*: