ASP.Net Web API Xml 序列化问题
Posted
技术标签:
【中文标题】ASP.Net Web API Xml 序列化问题【英文标题】:ASP.Net Web API Xml searlization issue 【发布时间】:2016-12-11 19:51:10 【问题描述】:我们面临着 ASP.NET WebAPI 的 xml searilization 的多个问题。目前我们使用xmlserializer
而不是DataContractSearilizer
(这是XML 序列化的默认序列化方法)有两个基本原因。
在DataContractSearlizer
中,我们需要按升序传递对象的所有字段,否则在api结束时为空。
我们还需要在 XML 标头中传递命名空间,以便将 XML 对象传递给 Web api。
出于这两个基本原因,我们决定使用xmlserializer
而不是DataContractSearlizer
。但现在我们面临另一个默认DataContractSearilization
机制中不存在的问题。假设我们有一个这样的对象
[DataContract]
public class Car
public int ID;
[DataMember]
public string CarName;
[DataMember]
public string CarType;
现在我们期望在客户端我们只会收到由 DataMember 属性包围的那些字段,但出乎意料的是,无论 DataMember 属性是否存在,我们都会收到所有字段。这在 json searlization 中运行良好,结果是我们最初所期望的。有人可以在这方面帮助我们吗?
【问题讨论】:
This 可能会帮助你 【参考方案1】:您可能正在寻找IgnoreDataMember 属性:
当应用于某个类型的成员时,指定该成员不是 数据契约的一部分,并且没有被序列化。
[DataContract]
public class Car
[IgnoreDataMember]
public int ID;
[DataMember]
public string CarName;
[DataMember]
public string CarType;
【讨论】:
我想我已经尝试过了,但它也不起作用。让我再试一次。几分钟后回复您。 哦,等等 - 试试[XmlIgnore]
,因为你没有使用 DataContractSerializer - 我要快速...
不客气。请考虑接受答案。
虽然我的问题现在已经解决了,但是您知道为什么在 DataContractSearilizer 中我们需要按升序传递所有字段,否则字段值会变为 null 吗?
抱歉,我最初不知道如何将答案标记为已接受。阅读您的参考链接后,我已将您的答案标记为已接受以上是关于ASP.Net Web API Xml 序列化问题的主要内容,如果未能解决你的问题,请参考以下文章
从 ASP Net Web API POST 请求中删除空的 xml 标记
Asp.Net Web API 错误:“ObjectContent`1”类型无法序列化内容类型“application/xml”的响应正文;字符集=utf-8'
Asp.Net Web API错误:'ObjectContent`1'类型无法序列化内容类型'application / xml的响应主体;字符集= UTF-8'(代码