我正在使用带有 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/