簡體   English   中英

WCF,XML反序列化

[英]WCF, XML deserialization

我有一個簡單的WCF服務

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(ShoppingCart value);
}

public class ShoppingCart
{
    public string name;
    [XmlElement("ShoppingCartItem")]
    public ShoppingCartItem[] ShoppingCartItems;
}

public class ShoppingCartItem
{
    public string Description;
}

和一個簡單的測試控制台。 當我將服務引用添加到測試控制台時,My ShoppingCart類將出現在TestConsole reference.cs文件中。 所以我可以在TestConsole項目上這樣寫:

static void Main(string[] args)
{
    ShoppingCart body = new ShoppingCart();
    FileStream myFileStream = new FileStream(@"C:\Resources\Xmls\New Folder\shoppingCart.xml", FileMode.Open);
    XmlSerializer mySerializer = new XmlSerializer(typeof(ShoppingCart));
    ShoppingCart cart = (ShoppingCart)mySerializer.Deserialize(myFileStream);    
}

我的shoppingCart.xml文件是這樣的:

<?xml version="1.0"?>
 <ShoppingCart> 
   <name>test</name>
   <ShoppingCartItem>
     <Description>XBox 360</Description>
   </ShoppingCartItem>
   <ShoppingCartItem>
     <Description>Cell Phone</Description>
   </ShoppingCartItem>
</ShoppingCart> 

所以,我等着代碼來

ShoppingCart cart = (ShoppingCart)mySerializer.Deserialize(myFileStream);

行,應該有兩個項目。 但似乎是這樣的:

在此處輸入圖片說明

您能否解釋為什么我的列表沒有填寫?

您需要像這樣添加XmlElement屬性:

public class ShoppingCart
{
    [XmlElement("ShoppingCartItem")]
    public ShoppingCartItem[] ShoppingCartItems;
}

如果可以將Xml文件更改為此結構並刪除XmlElement屬性,則可以選擇

<ShoppingCart>
  <name>test</name>
  <ShoppingCartItems>
   <ShoppingCartItem>
     <Description>XBox 360</Description>
   </ShoppingCartItem>
   <ShoppingCartItem>
     <Description>Cell Phone</Description>
   </ShoppingCartItem>
  </ShoppingCartItems>
</ShoppingCart>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM