WCF XML и сериализация со списком - PullRequest
3 голосов
/ 15 декабря 2009

У меня есть базовая служба 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>

В моем классе это хранится в моей памяти:

[DataMember(Name = "Products", Order = 4, IsRequired = false, EmitDefaultValue = false)]
public List<Product> products;

Тогда в моем классе Product у меня есть SKU, цена, ProductName и количество. Другие не относящиеся к списку элементы в моем классе устанавливаются, но это не выглядит так, как будто xml заполняет мой список Я что-то упустил?

Вот мой класс Продукта

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;
}

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Если у вас есть определенный xml, DataContractSerializer может быть плохим выбором - он не предназначен для того, чтобы дать вам контроль. Я подозреваю, что вам может понадобиться [XmlSerializerFormat] в службе, если вы ожидаете определенного формата XML. В этом случае, некоторые [XmlArray] / [XmlArrayItem] должны дать этот формат. Что-то вроде (с [XmlSerializerFormat] на сервисном контракте):

[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;}
}
2 голосов
/ 15 декабря 2009

Имеет ли ваш Product класс атрибут [DataContract] ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...