C# XML反序列化中未填充属性的对象元素为

C# XML反序列化中未填充属性的对象元素为,c#,xml,class,xml-deserialization,C#,Xml,Class,Xml Deserialization,我从一个Web服务XML接收到的信息如下: <RESULT> <GRP ID="INP"> <FLD NAME="SORDNO" TYPE="Char"></FLD> <FLD NAME="SITENO" TYPE="Char">999</FLD> </GRP> <TAB DIM="

我从一个Web服务XML接收到的信息如下:

<RESULT>
<GRP ID="INP">
    <FLD NAME="SORDNO" TYPE="Char"></FLD>
    <FLD NAME="SITENO" TYPE="Char">999</FLD>
</GRP>
<TAB DIM="100" ID="POS" SIZE="0"/>
<TAB DIM="500" ID="ERR" SIZE="2">
    <LIN NUM="1">
        <FLD NAME="ERRORS" TYPE="Char"/>
    </LIN>
    <LIN NUM="2">
        <FLD NAME="ERRORS" TYPE="Char">Site code 999 is not valid</FLD>
    </LIN>
</TAB>
当我执行序列化时,我执行以下代码:

private SagePOCreateResponse1.RESULT GetPOResponse(SageWeb.CAdxResultXml sageSvcResponse)
{
    string xml = sageSvcResponse.resultXml;

    XmlSerializer serializer = new XmlSerializer(typeof(SagePOCreateResponse1.RESULT));
    StringReader rdr = new StringReader(xml);
    SagePOCreateResponse1.RESULT resultingMessage = (SagePOCreateResponse1.RESULT)serializer.Deserialize(rdr);
    return resultingMessage;
}
当我执行程序时,我没有得到一个错误,表明类结构与XML结构不匹配,但具体来说,FLD元素不包含值。例如,如果我停下来查看一个特定字段(FLD),在GRP中我会得到属性值,但不会得到元素的值:

?objectResponse.GRP.FLD[0]
{DropShipmentFulfillment.SagePOCreateProcess.SagePOCreateResponse1.RESULTFLD}
    NAME: "SORDNO"
    TYPE: "Char"
看起来序列化程序没有将元素值放在适当的位置,尽管我认为我已经正确地命名了它,并且没有收到任何错误

我缺少什么?为什么它要解析属性而不是元素值


我确实尝试过创建XSD到C#类的路线,但当我不得不处理动态线(LIN)时,我尝试创建自己的类。

多亏了jdweng,我才能够找到解决方案。在我的问题中,所有的事情都是一样的,我换了一门课:

我需要这一行“[System.Xml.Serialization.XmlTextAttribute()]”,而不仅仅是“[XmlText]”行


该类现在对XML进行反序列化,因此我同时获得属性值和innerText值。

您只有属性和类。您缺少内部文本。使用以下内容:[XmlText]公共字符串值;我试过了,但没用。我仍然无法从innerText中获取值。在我切换回通过DOM进行解析之前,我仍在努力完成这项工作。有两种类型的Xml数组1)一级标记2)两级标记。您正在使用:[XmlElement(“FLD”)],这意味着Xml文件只有一个级别的数组标记。是的,虽然问题不在于数组,而在于我如何定义FLD值。当我把它放在适当的位置时,我能够从XML:public部分类RESULTFLD{[xmldattribute(“NAME”)]公共字符串名称;[xmldattribute(“TYPE”)]公共字符串类型;[System.XML.Serialization.XmlTextAttribute()公共字符串值;}
?objectResponse.GRP.FLD[0]
{DropShipmentFulfillment.SagePOCreateProcess.SagePOCreateResponse1.RESULTFLD}
    NAME: "SORDNO"
    TYPE: "Char"
    public partial class RESULTFLD
    {
        [XmlAttribute("NAME")]
        public string NAME;
        [XmlAttribute("TYPE")]
        public string TYPE;
        [System.Xml.Serialization.XmlTextAttribute()]
        public string Value;
    }