C# XML反序列化
我有一个简单的WCF服务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
[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服务?