WCF XML和带列表的序列化

WCF XML和带列表的序列化,xml,wcf,list,xml-serialization,Xml,Wcf,List,Xml Serialization,我有一个基本的WCF服务,它需要一些xml。有些xml是这样的列表: <Root> <Products> <Product> <SKU>1234</SKU> <Price>2533</Price> <ProductName>Brown Shows</ProductName>

我有一个基本的WCF服务,它需要一些xml。有些xml是这样的列表:

<Root>
    <Products>
        <Product>
            <SKU>1234</SKU>
            <Price>2533</Price>
            <ProductName>Brown Shows</ProductName>
            <Quantity>1</Quantity>
        </Product>
        <Product>
            <SKU>345345</SKU>
            <Price>2345</Price>
            <ProductName>Red Shows</ProductName>
            <Quantity>1</Quantity>
        </Product>
    </Products>
</Root>

您的
产品
类是否具有
[DataContract]
属性???

如果您有特定的xml,
DataContract序列化程序
可能是一个糟糕的选择-它不是为您提供控制而设计的。如果您需要特定的xml格式,我怀疑您可能需要服务上的
[XmlSerializerFormat]
。在这种情况下,一些
[XmlArray]
/
[XmlArrayItem]
应该给出这种格式。类似于(在服务合同上使用
[XmlSerializerFormat]
):

[XmlRoot(“根”)]
公共类MyRoot
{
[XmlArray(“产品”)、XmlArrayItem(“产品”)]
公共列表产品{get;set;}
}
公共类产品
{
[XmlElement(“SKU”)]
公共字符串Sku{get;set;}
公共整数价格{get;set;}
公共字符串ProductName{get;set;}
公共整数数量{get;set;}
}

否,但我的主类的名称设置为“Root”。我也尝试在产品上设置DataContract,但它并没有解决问题。在我调用我的函数后,我输出产品列表的大小,它输出0通信在那里。。。我的主接收类中有一些简单的变量,当我输出它们时,它会按预期返回。显然,我必须为我的产品类上的DataContract设置Namespace=”“。这把它修好了。谢谢我最多可以接收5种不同的请求类型,每种类型都有不同的xml格式。。。所以我不认为这对我有用。我以前尝试过使用XmlRoot,但由于某些原因,响应输出没有正确设置根名称。这可能是因为我正在使用WCF REST初学者工具包?
[DataMember(Name = "Products", Order = 4, IsRequired = false, EmitDefaultValue = false)]
public List<Product> products;
public class Product
{
    [DataMember(Name = "SKU", Order = 0)]
    public string sku;

    // for the request
    [DataMember(Name = "Price", Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public int price;

    [DataMember(Name = "ProductName", Order = 2, IsRequired = false, EmitDefaultValue = false)]
    public string productName;

    [DataMember(Name = "Quantity", Order = 3, IsRequired = false, EmitDefaultValue = false)]
    public int quantity;

    // for the response
    [DataMember(Name = "Available", Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public string available;
}
[XmlRoot("Root")]
public class MyRoot
{
    [XmlArray("Products"), XmlArrayItem("Product")]
    public List<Product> Products {get;set;}
}

public class Product 
{
    [XmlElement("SKU")]
    public string Sku {get;set;}
    public int Price {get;set;}
    public string ProductName {get;set;}
    public int Quantity {get;set;}
}