如何在没有数据时从DataContractSerialization中排除属性

本文关键字:DataContractSerialization 排除 属性 数据 | 更新日期: 2023-09-27 18:16:11

我在我的Web API应用程序中使用DataContractSerializer,在我的操作中,我返回的数据类型如下:

public class Event
{
  public string Name {get; set;}
  public IList<Division> Divisions {get;set;}
}

序列化时,它返回以下xml:

    <Event xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07
/EventTypeNameSpace">
        <Name>some name</Name>
        <Divisions i:nil="true" />
    </Event>

1)为什么它返回两个xmlns:i和xmlns属性?他们怎么能被排除在外呢?

2)当它为空时,我如何从xml中排除部门?

如何在没有数据时从DataContractSerialization中排除属性

1: "http://schemas.datacontract.org/2004/07"是由数据契约序列化器序列化的类型使用的默认命名空间;如果你不喜欢,那就改变你的合同;"http://www.w3.org/2001/XMLSchema-instance"将"nil"定义为一个特殊值

2:通过正确定义契约

[DataContract(Namespace="")]
public class Event
{
    [DataMember]
    public string Name { get; set; }
    [DataMember(EmitDefaultValue=false)]
    public IList<Division> Divisions { get; set; }
}

然而,我应该补充-如果你想要严格控制布局的外观,你应该使用XmlSerializer,而不是DataContractSerializer

相关文章:
  • 没有找到相关文章