C# 将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

这是我试图反序列化的XML文件的一个示例

<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));
                                                        **********