C# 将XML文件反序列化为类对象时遇到问题
这是我试图反序列化的XML文件的一个示例C# 将XML文件反序列化为类对象时遇到问题,c#,xml,xml-serialization,C#,Xml,Xml Serialization,这是我试图反序列化的XML文件的一个示例 <TradeFills> <TradeFill> <Broker>xxx</Broker> <CustomerAccount/> <qwFillTransID>xxxxxxxxxxxxxxxxxxx</qwFillTransID> <qwPrevTransID>xxx</qwPrevTransID> <qwGroupTr
<TradeFills>
<TradeFill>
<Broker>xxx</Broker>
<CustomerAccount/>
<qwFillTransID>xxxxxxxxxxxxxxxxxxx</qwFillTransID>
<qwPrevTransID>xxx</qwPrevTransID>
<qwGroupTransID>xxxxxxxxxxxxxxxxx</qwGroupTransID>
<GroupTransID>xxxxxxxx</GroupTransID>
<TransID>x</TransID>
<Service>xxxxxxxxxxxxxxxx</Service>
<Symbol>xx</Symbol>
<Exchange>xxxxx</Exchange>
<InstClass>xxxxxxxx</InstClass>
<InstSubClass>xxxxxxx</InstSubClass>
<ContractSymbol>xxxx</ContractSymbol>
<ExpirationDate>xxxxxxxx</ExpirationDate>
<Month>xx</Month>
<Year>xxxx</Year>
<Strike>xxx</Strike>
<TradePCU>xxxx</TradePCU>
<Buy>x</Buy>
<Quantity>xx</Quantity>
<Price>xxxxx</Price>
<FillTime>xxxxxxxxxxxxxxx</FillTime>
<PosUpdated>xxxxxxxxxxx</PosUpdated>
<Description/>
</TradeFill>
</TradeFills>
这是我在运行时遇到的错误:
Unhandled Exception: System.InvalidOperationException: There is an error in XML
document (2, 2). ---> System.InvalidOperationException: <TradeFills xmlns=''> wa
s not expected.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTradeF
ill.Read3_TradeFill()
--- End of inner exception stack trace ---
未处理的异常:System.InvalidOperationException:XML中存在错误
文件(2,2)。——>System.InvalidOperationException:wa
这是预料不到的。
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTradeF
二读3_TradeFill()
---内部异常堆栈跟踪的结束---
任何帮助都将不胜感激。我对c#和XML还不熟悉,不知道哪里出了问题。我发现至少有两个问题:
- 您的XML文档无效,缺少XML声明:
- 您的XML显然包含一组
对象,您为TradeFill
创建了typeof(TradeFill)
。您需要为XmlSerializer
(或typeof(TradeFill[])
,或某些其他集合类型)创建序列化程序:typeof(List)
注意使用
XmlRootAttribute
指定根元素:如果未指定,默认根元素将是“ArrayOfFillItem”您应该基于TradeFill类型-而不是TradeFill类型反序列化。毕竟,您的XML定义了一个TradeFills的实例
因此,在实例化反序列化程序时,请使用
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with Stream");
// Create an instance of the XmlSerializer.
XmlSerializer serializer = new XmlSerializer(typeof(TradeFills));
**********
TradeFill
-不是TradeFill
问题是在我的代码中还是在XML文件中?还有,是标签把事情搞砸了吗?我不知道为什么那个标签会在那里。
XmlSerializer serializer = new XmlSerializer(typeof(TradeFill[]), new XmlRootAttribute("TradeFills"));
// Reading the XML document requires a FileStream.
Stream reader = new FileStream(filename, FileMode.Open);
// Declare an object variable of the type to be deserialized.
TradeFill[] tradeFills;
// Call the Deserialize method to restore the object's state.
tradeFills = (TradeFill[])serializer.Deserialize(reader);
private void DeserializeObject(string filename)
{
Console.WriteLine("Reading with Stream");
// Create an instance of the XmlSerializer.
XmlSerializer serializer = new XmlSerializer(typeof(TradeFills));
**********