WCF XML结构 - 如何删除包装器节点?

时间:2011-04-19 11:17:37

标签: xml wcf

使用List对象时遇到问题:

[DataContract]
public class Recipe
{
        [DataMember(Name="Allergies")]
        public List<AllergyModel> Allergies { get; set; }
}

[DataContract]    
public class AllergyModel
{
    public string Allergy { get; set; }
}

如何使生成的XML不包含AllergyModel节点?当我来阅读Recipe参数时,Allergies列表属性为null,因为在原始XML中,结构没有AllergyModel节点。

<Allergies>
    <a:AllergyModel>
        <a:Allergy>nuts</a:Allergy>
    </a:AllergyModel>
    <a:AllergyModel>
        <a:Allergy>wheat</a:Allergy>
    </a:AllergyModel>
</Allergies>

2 个答案:

答案 0 :(得分:3)

尝试使用自定义集合:

[CollectionDataContract(Name = "Allergies", ItemName = "Allergy")]
public class AllergyList : List<string>
{
    ...
}

使用此集合代替List<AllergyModel>。重要的是,您可以传递自定义集合中项目的名称。

答案 1 :(得分:1)

您可以使用MessageContract属性,并将IsWrapped参数设置为false