C# XML反序列化中未填充属性的对象元素为
我从一个Web服务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="
<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;
}