C# XML反序列化

C# XML反序列化,c#,xml,wcf,serialization,deserialization,C#,Xml,Wcf,Serialization,Deserialization,我有一个简单的WCF服务 [ServiceContract] public interface IService1 { [OperationContract] string GetData(ShoppingCart value); } public class ShoppingCart { public string name; [XmlElement("ShoppingCartItem")] public ShoppingCartItem[] Shop

我有一个简单的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;
}
和一个简单的测试控制台。当我将我的服务引用添加到测试控制台时,我的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> 
public class ShoppingCart
{
    [XmlElement("ShoppingCartItem")]
    public ShoppingCartItem[] ShoppingCartItems;
}
行,应该有两个项目。但似乎是这样的:

<?xml version="1.0"?>
 <ShoppingCart> 
   <name>test</name>
   <ShoppingCartItem>
     <Description>XBox 360</Description>
   </ShoppingCartItem>
   <ShoppingCartItem>
     <Description>Cell Phone</Description>
   </ShoppingCartItem>
</ShoppingCart> 
public class ShoppingCart
{
    [XmlElement("ShoppingCartItem")]
    public ShoppingCartItem[] ShoppingCartItems;
}


您能解释一下为什么我的列表没有填充吗?

您需要像这样添加XmlElement属性:

<?xml version="1.0"?>
 <ShoppingCart> 
   <name>test</name>
   <ShoppingCartItem>
     <Description>XBox 360</Description>
   </ShoppingCartItem>
   <ShoppingCartItem>
     <Description>Cell Phone</Description>
   </ShoppingCartItem>
</ShoppingCart> 
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>

测试
XBox 360
手机

你确定吗?是我干的!Daniel,如果我在一个简单的控制台项目中运行这一切,它就会工作。但在我的例子中,我的真实对象(购物车)在WCF项目中,当我向测试项目添加服务引用时,它会转到testconsole。这次不行了。谢谢你的帮助,我不确定什么不起作用,你的WCF服务是如何实现的,你如何调用WCF服务?