微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML递归反序列化

如何解决XML递归反序列化

| 我有一些要反序列化的XML。 Kronos_WCF对象可以很好地反序列化,但是Response对象不能。我是否缺少一些递归反序列化技术? 这是我要反序列化的XML:
<?xml version=\'1.0\' encoding=\'UTF-8\' ?>
<Kronos_WFC Version=\"1.0\" WFCVersion=\"6.2.0.4\" TimeStamp=\"6/15/2011 9:15AM GMT-04:00\">
<Response Status=\"Success\" Timeout=\"1800\" PersonKey=\"-1\" Object=\"System\" UserName=\"User\" Action=\"logon\" PersonNumber=\"User\">
</Response>
<Response Status=\"Success\" Object=\"System\" UserName=\"User\" Action=\"logoff\">
</Response>
</Kronos_WFC>
这是我的反序列化器:
public static T Deserialize<T>(this string xml)
{
    var ser = new XmlSerializer(typeof (T));
    object obj;
    using (var stringReader = new StringReader(xml))
    {
        using (var xmlReader = new XmlTextReader(stringReader))
        {
            obj = ser.Deserialize(xmlReader);
        }
    }
    return (T) obj;
}
这是我在VS2010中看到的屏幕截图: 这是使用XSD.exe生成的类中的代码
[System.CodeDom.Compiler.GeneratedCodeAttribute(\"xsd\",\"4.0.30319.1\")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(\"code\")]
[XmlRootAttribute(\"Kronos_WFC\",Namespace = \"\",IsNullable = false)]
public class Kronos_WFCType
{

    private object[] m_itemsField;

    private string m_timeStampField;

    private string m_versionField;

    private string m_wFcVersionField;

    /// <remarks/>
    [XmlElementAttribute(\"Request\",typeof(RequestType),Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    [XmlElementAttribute(\"Response\",typeof(ResponseType),Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    [XmlElementAttribute(\"Transaction\",typeof(TransactionType),Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public object[] Items
    {
        get
        {
            return m_itemsField;
        }
        set
        {
            m_itemsField = value;
        }
    }

    [XmlAttributeAttribute()]
    public string TimeStamp
    {
        get
        {
            return m_timeStampField;
        }
        set
        {
            m_timeStampField = value;
        }
    }

    /// <remarks/>
    [XmlAttributeAttribute()]
    public string Version
    {
        get
        {
            return m_versionField;
        }
        set
        {
            m_versionField = value;
        }
    }

    /// <remarks/>
    [XmlAttributeAttribute()]
    public string WFCVersion
    {
        get
        {
            return m_wFcVersionField;
        }
        set
        {
            m_wFcVersionField = value;
        }
    }
}

[System.CodeDom.Compiler.GeneratedCodeAttribute(\"xsd\",\"4.0.30319.1\")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(\"code\")]
public class ResponseType
{

    private string messageField;

    private string sequenceField;

    private string statusField;

    private string transactionSequenceField;

    /// <remarks/>
    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Message
    {
        get
        {
            return messageField;
        }
        set
        {
            messageField = value;
        }
    }

    /// <remarks/>
    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Sequence
    {
        get
        {
            return sequenceField;
        }
        set
        {
            sequenceField = value;
        }
    }

    /// <remarks/>
    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Status
    {
        get
        {
            return statusField;
        }
        set
        {
            statusField = value;
        }
    }

    /// <remarks/>
    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string TransactionSequence
    {
        get
        {
            return transactionSequenceField;
        }
        set
        {
            transactionSequenceField = value;
        }
    }
}
任何帮助,将不胜感激。     

解决方法

        
Response
中定义的
Status
属性错误 它应该是
[XmlAttributeAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Status
相反,它实际上是
[XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
所以xml反序列化器正在寻找
<Response><Status>Success</Status></Response>
这至少将允许您反序列化
Response.Status
看起来xml片段与类定义不匹配。     ,        xml的Response属性似乎与您的班级中存在的属性不匹配。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。