C# 关于.net中XML反序列化的问题

C# 关于.net中XML反序列化的问题,c#,.net,xml-deserialization,C#,.net,Xml Deserialization,我正在尝试反序列化来自web服务的XML,但我不知道如何告诉序列化程序如何处理这段XML: <Movimientos> <Movimientos> <NOM_ASOC>pI22E7P30KWB9KeUnI+JlMRBr7biS0JOJKo1JLJCy2ucI7n3MTFWkY5DhHyoPrWs</NOM_ASOC> <FEC1>RZq60KwjWAYPG269X4r9lRZrjbQo8eRqIOmE8qa5p/0=</FEC1&

我正在尝试反序列化来自web服务的XML,但我不知道如何告诉序列化程序如何处理这段XML:

<Movimientos>
<Movimientos>
<NOM_ASOC>pI22E7P30KWB9KeUnI+JlMRBr7biS0JOJKo1JLJCy2ucI7n3MTFWkY5DhHyoPrWs</NOM_ASOC>
<FEC1>RZq60KwjWAYPG269X4r9lRZrjbQo8eRqIOmE8qa5p/0=</FEC1>
<IDENT_CLIE>IYbofEiD+wOCJ+ujYTUxgsWJTnGfVU+jcQyhzgQralM=</IDENT_CLIE>
</Movimientos>
<Movimientos>

pI22E7P30KWB9KeUnI+JLMRBR7BIS0JKO1JLJCY2UCI7N3MfWky5DHHYOPRs
RZq60KwjWAYPG269X4r9lRZrjbQo8eRqIOmE8qa5p/0=
IYbofEiD+wOCJ+ujYTUxgsWJTnGfVU+jcQyhzgQralM=

正如您所看到的,子标记使用与其父标记相同的标记,我认为这是错误的,但是webservice是由外部公司提供的,并且不会改变它,是否有任何方法或库来整理XML,或者如何在我的类上使用属性,以便序列化程序正确地处理它?感谢您的帮助。

序列化程序应该可以使用它-问题可能只是类不能具有与类本身同名的属性。因此,请使用
XmlElementAttribute
将其匹配起来:

[XmlRoot("Movimientos")]
public class Movimientos
{
    [XmlElement("Movimientos")]
    public SomeOtherClass SomeOtherProperty { get; set; }
}

public class SomeOtherClass
{
    public string NOM_ASOC { get; set; }
    public string FEC1 { get; set; }
    public string IDENT_CLIE { get; set; }
}

仅供参考,XML实际上并没有错;规范中没有规定子元素不能与父元素同名。这可能是不寻常的,但仍然有效。

如果.Net的XML序列化程序实际上没有对其进行反序列化,那么最好编写自己的类来解析它。您可以使用System.Xml或System.Xml.Linq(更简单)名称空间。

最后一个(非结束)标记是输入错误,还是服务真的返回无效的Xml?您需要如何处理这些数据?您真的需要将其序列化到自定义对象树中吗?或者您可以使用XDocument类和LINQ查询来获取数据,这会更简单吗?我不会说这是不寻常或不寻常的。如果定义菜单结构或其他层次结构列表(组织结构图),则同一节点将有许多子-父元素name@Chad:您通常不应该这样做,至少在.NET中不应该这样做。父类的名称为单数,子属性的名称为复数。这可能只是一个字母的差异,但这就是所有需要的。如果存在嵌套的1:1关系,则约定使用前缀“Inner”或“Child”。并不是说其他方法都是错误的,但如果你发现自己遇到了名称冲突,那么这是一个开始考虑不同命名约定的好时机。这不一定是冲突。在菜单的情况下,每个节点都是同一类型的对象,可以无限递归。@Chad:我说的是类结构中的名称冲突。这就是这个问题的内容。要避免这种情况,只需区分元素名称中的单数形式和复数形式,这在语义上是正确的。