Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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序列化XmlNodes_C#_Xml_Serialization - Fatal编程技术网

同名的C#XML序列化XmlNodes

同名的C#XML序列化XmlNodes,c#,xml,serialization,C#,Xml,Serialization,我目前正在开发一个C#工具,该工具必须序列化和反序列化包含具有相同名称但不同内容/属性的嵌套对象的对象。它基本上是一个具有n个级别的通用列表,其中具有相同名称的节点根据父节点具有不同的内容。现在我有一个问题,我不能用默认的XML序列化程序来实现,因为如果有同名的不同类,它不知道选择哪个类 Xml示例: <assembly> <content> <add x="1" y="2"></add> <xml path="

我目前正在开发一个C#工具,该工具必须序列化和反序列化包含具有相同名称但不同内容/属性的嵌套对象的对象。它基本上是一个具有n个级别的通用列表,其中具有相同名称的节点根据父节点具有不同的内容。现在我有一个问题,我不能用默认的XML序列化程序来实现,因为如果有同名的不同类,它不知道选择哪个类

Xml示例:

<assembly>
   <content>
      <add x="1" y="2"></add>
      <xml path="C:/abc.xml">
         <add z="1">
            <dummyNode>Content to Insert</dummyNode>
         </add>
      </xml>
   </content>
</assembly>
ContentClass.cs

public class Content
{
       [System.Xml.Serialization.XmlElement]
       public List<ContentEntry> Entries;
}
generic/xml.cs

public class xml : ContentEntry
{
      [System.Xml.Serialization.XmlAttribute("path")]
      public String Path;
}
xml/add.cs

public class add : ContentEntry
{
      [System.Xml.Serialization.XmlAttribute("z")]
      public String Z;
}
我能把这个存档吗?或者我必须在XmlSerializer中实现某种逻辑吗


致以最诚挚的问候,

尝试使用此链接将XML转换为CS并序列化/反序列化对象您可以使用标准的序列化函数。只需更改两个add类的名称,使它们不同即可。然后使用[System.Xml.Serialization.XmlRoot(“添加”)]和[System.Xml.Serialization.xmlement(“添加”)],这样serialize函数现在就可以使用实际的标记名了。XmlRoot可以超越任何类,而不仅仅是xml中的根标记
public class add : ContentEntry
{
       [System.Xml.Serialization.XmlAttribute("x")]
       public String X;

       [System.Xml.Serialization.XmlAttribute("y")]
       public String Y;
}
public class xml : ContentEntry
{
      [System.Xml.Serialization.XmlAttribute("path")]
      public String Path;
}
public class add : ContentEntry
{
      [System.Xml.Serialization.XmlAttribute("z")]
      public String Z;
}