c# - Web API - 自关闭标记而不是 i :nil

标签 c# asp.net-web-api datacontractserializer

我正在使用带有 DataContract 序列化的 Web API。 输出如下所示:

<Data>
<Status>
  <Date>2014-08-13T00:30:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T01:00:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T01:30:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T02:00:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>

我能够通过执行以下操作删除所有额外的命名空间:

[DataContract(Namespace="")]
public class Status

但唯一剩下的属性是 i:nil 属性。 我应该怎么做才能删除 i:nil 属性?

最佳答案

您需要设置 EmitDefaultValue DataMember 属性中的属性

[DataMember(EmitDefaultValue = false)]

请确保不要在设置了 IsRequired = true 的成员上设置此属性。

编辑

您也可以手动迭代 XML 并使用 LINQ 2 XML 删除 nil 属性:

XNamespace i = "http://www.w3.org/2001/XMLSchema-instance";
        XDocument xdoc = XDocument.Load(@"XmlHere"); // This may be replaced with XElement.Parse if the XML is in-memory

        xdoc.Descendants()
                 .Where(node => (string)node.Attribute(i + "nil") == "true")
                 .Remove();

关于c# - Web API - 自关闭标记而不是 i :nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346892/

相关文章:

c# - 使用 restful wcf 将图像发送到 android 应用程序

c# - SQL Server CE 架构

c# - Web API、IQueryable、OData 和 HttpResponseMessage 作为返回类型?

.net - .net 中基于资源的授权

wcf - 为什么 WCF 将请求/响应类型包装在另一个 XML 元素中,以及如何防止这种情况?

c# - 无法安装 Entity Framework Power Tools

javascript - 改写一个Silverlight项目成javascript,涉及wcf

c# - Web API 绑定(bind)不可变模型

c# - DataContract 模型绑定(bind)到 ASP.NET MVC 操作方法参数中的 JSON

c# - 具有最大字符数的 System.Double 值