3 Stimmen

WCF XML und Serialisierung mit Liste

Ich habe eine grundlegende WCF-Dienst, der einige Xml nimmt. Einige der Xml ist eine Liste wie so:

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

In meiner Klasse, in der dies gespeichert wird, habe ich:

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

Dann habe ich in meiner Produktklasse die SKU, den Preis, den Produktnamen und die Menge. Andere Elemente in meiner Klasse, die nicht in der Liste enthalten sind, werden zwar gesetzt, aber es sieht nicht so aus, als ob die XML-Datei meine Liste auffüllt. Übersehe ich etwas?

Hier ist meine Produktklasse

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

2voto

marc_s Punkte 701497

Ist Ihr Product Klasse haben eine [DataContract] Attribut

2voto

Marc Gravell Punkte 970173

Wenn Sie eine bestimmte xml, DataContractSerializer könnte eine schlechte Wahl sein - es ist nicht darauf ausgelegt, Ihnen Kontrolle zu geben. Ich vermute, Sie brauchen [XmlSerializerFormat] auf den Dienst, wenn Sie ein bestimmtes xml-Format erwarten. In diesem Fall werden einige [XmlArray] / [XmlArrayItem] sollte dieses Format ergeben. Etwas wie (mit [XmlSerializerFormat] auf dem Dienstleistungsvertrag):

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X