如何在没有数据的情况下从DataContractSerialization中排除属性?

时间:2013-05-30 14:13:24

标签: c# asp.net .net serialization asp.net-web-api

我在我的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中排除它?

1 个答案:

答案 0 :(得分:1)

1:“http://schemas.datacontract.org/2004/07”是由data-contract序列化器序列化的类型使用的默认命名空间;如果你不喜欢这样 - 改变你的合同; “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