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