Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化XML文档引发错误-如何找出失败的地方_C#_Xml_Ofx - Fatal编程技术网

C# 反序列化XML文档引发错误-如何找出失败的地方

C# 反序列化XML文档引发错误-如何找出失败的地方,c#,xml,ofx,C#,Xml,Ofx,我试图将OFXXML文档反序列化为其对象(我将XSD转换为类) 下面是代码 XmlSerializer xmlSerializer = new XmlSerializer(typeof(OFX)); using (var reader = xmlDoc.Root.CreateReader()) { return (OFXRequest)xmlSerializer.Deserialize(reader); } 更新xm

我试图将OFXXML文档反序列化为其对象(我将XSD转换为类)

下面是代码

  XmlSerializer xmlSerializer = new XmlSerializer(typeof(OFX));

        using (var reader = xmlDoc.Root.CreateReader())
        {
            return (OFXRequest)xmlSerializer.Deserialize(reader);
        }
更新xml XmlSerializer时失败,错误为

xml文档:

<?OFX OFXHEADER=200  VERSION=211  SECURITY="NONE"  OLDFILEUID="NONE"  NEWFILEUID="NONE"  ?>
<OFX>
  <SIGNONMSGSRQV1>
    <SONRQ>
      <DTCLIENT>20120202</DTCLIENT>
      <USERID>USER-ID</USERID>
      <USERPASS>PASSWORD</USERPASS>
      <LANGUAGE>ENG</LANGUAGE>
      <FI>
        <ORG>Organisation</ORG>
        <FID>OrganisationID</FID>
      </FI>
      <APPID>YOD</APPID>
      <APPVER>1</APPVER>
    </SONRQ>
  </SIGNONMSGSRQV1>
  <SIGNUPMSGSRQV1>
    <ACCTINFOTRNRQ>
      <TRNUID>456579841231</TRNUID>
      <ACCTINFORQ>
        <DTACCTUP>2013101209000.000[2:GMT]</DTACCTUP>
      </ACCTINFORQ>
    </ACCTINFOTRNRQ>
  </SIGNUPMSGSRQV1>
</OFX>

20120202
用户ID
密码
英格
组织
组织ID
约德
1.
456579841231
2013101209000.000[2:GMT]
错误:

无法生成临时类(结果=1)。错误CS0030:无法执行 将类型“System.DateTime”转换为“string”错误CS0030:无法 将类型“System.DateTime”转换为“string”错误CS0030:无法 将类型“System.DateTime”转换为“string”


我需要知道的是,如何在反序列化过程中找到失败代码的确切位置?没有内在的例外等等。

猜测一下,你不知道你想让它做什么

[XmlElement(Type=typeof(string),ElementName="TAXYEAR",IsNullable=false,DataType="gYear")]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public TAXYEARCollection __TAXYEARCollection;
它清楚地说“将值视为字符串”,这句话:

[Serializable]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public class TAXYEARCollection : ArrayList
{
    public DateTime Add(DateTime obj)
    {
        base.Add(obj);
        return obj;
    }

    public DateTime Add()
    {
        return Add(new DateTime());
    }

    public void Insert(int index, DateTime obj)
    {
        base.Insert(index, obj);
    }

    public void Remove(DateTime obj)
    {
        base.Remove(obj);
    }

    new public DateTime this[int index]
    {
        get { return (DateTime) base[index]; }
        set { base[index] = value; }
    }
}

很明显,它希望值是
DateTime

您的OFXRequest类是什么样子的?这个错误发生在元数据/元编程阶段,而不是“读取xml”阶段,因此这里有趣的不是xml,而是c。xrequest的
是什么样子的?大约50000行长-在这里粘贴有点困难。我可以把文件上传到某个服务器上?所以我怀疑发生的事情是在
XOFRequest
的构造函数中,您将
DateTime
分配给
字符串。记住使用语法
stringVar=dateTimeVar.ToString()而不是
stringVar=dateTimeVar
否则你会得到一个强制转换错误,抱怨它无法转换…奇怪的是-类中的所有日期都设置为字符串-而不是datetime-我很困惑为什么会出现这个错误:(我将[XmlElement(Type=typeof(string),ElementName=“TAXYEAR”,IsNullable=false,DataType=“gYear”)]更改为[XmlElement(Type=typeof(datetime),ElementName=“TAXYEAR”,IsNullable=false,DataType=“gYear”)]我现在收到了一个稍微好一点的错误。'gYear'是XmlElementAttribute.DataType属性的无效值。gYear无法转换为System.DateTime.Hacked生成的类以类型字符串替换gYear,以类型字符串替换DateTime。现在它反序列化得非常漂亮。感谢Marc Gravell的帮助。