1

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

4

1 回答 1

1

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

于 2013-05-30T14:25:27.560 回答