Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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反序列化到树_C#_Xml_Linq - Fatal编程技术网

C# 将XML反序列化到树

C# 将XML反序列化到树,c#,xml,linq,C#,Xml,Linq,我希望将以下XML数据构建到树结构中 <DATA> <NODES> <NODE> <ID>1</ID> <CONTENT>Foo</CONTENT> <ChildrenIds> <Child>2</Child> <Child>3</Child>

我希望将以下XML数据构建到树结构中

<DATA>
  <NODES>
    <NODE>
       <ID>1</ID>
       <CONTENT>Foo</CONTENT>
       <ChildrenIds>
           <Child>2</Child>
           <Child>3</Child>
       </ChildrenIds>
       <Level>1</Level>
    </NODE>
     <NODE>
       <ID>2</ID>
       <CONTENT>Foo</CONTENT>
       <ChildrenIds>
           <Child>4</Child>               
       </ChildrenIds>
    </NODE>
     <NODE>
       <ID>3</ID>
       <CONTENT>oo</CONTENT>
       <ChildrenIds>
         <Child>5</Child>
       </ChildrenIds>
    </NODE>
     <NODE>
       <ID>4</ID>
       <CONTENT>Doo</CONTENT>
       <ChildrenIds/>
    </NODE>
     <NODE>
       <ID>5</ID>
       <CONTENT>Koo</CONTENT>
       <ChildrenIds/>
    </NODE>
  </NODES>
</DATA>
使用LINQ将其解析为树结构的最佳方法是什么

我假设首先需要从一个树对象开始,如下所示:

public class Tree
{
    public Tree()
    {
        ChildrenNodes = new List<TreeStructure>();
    }

    public List<Tree> ChildrenNodes { get; set; }
    public int Id { get; set; }
    public string Content {get; set;}
}

选择编码

,那么ChildrenNodes呢?它们是否应该是带有Id、内容和子孩子列表的树类型?您的类和xml树结构似乎不同。ChildrenNodes应包含ChildrenID中引用的节点。因此,在上面的XML中,我应该有一个Id=1的树,这棵树将有Id=2和Id=3的ChildrenNodes,Id=2的孩子将有一个树=4的ChildrenNodes,依此类推。您真的需要FCL XML框架机制无法提供的东西吗?例如XmlDocument、Linq2Xml等。您的树看起来像一个非常通用的结构。除非它提供了一些其他丰富的行为,否则它可能真的不值得设计。为什么不使用呢?恐怕这不会将childrenid序列化到树节点中。我正在寻找一种方法来实现处理这个问题的特定逻辑?
usign system.runtime.serialization

[datacontract]
public class Tree
{
    public Tree()
    {
        ChildrenNodes = new List<TreeStructure>();
    }
    [datamember]
    public List<Tree> ChildrenNodes { get; set; }
    [datamember]
    public int Id { get; set; }
    [datamember]
    public string Content {get; set;}
}

void serialize(Tree tree,string filename)
{
datacontractserializer serializer = new datacontracetserializer (typeof(Tree));
system.xml.xmltextwriter writer = new xmltextwriter(filename,Encoding.UTF32);
serializer.WriteObject(writer,tree);
writer.close();
}

void deserialize(ref Tree tree,string filename)
{
    xmltextreader reader = new xmltextreader*new streamreader(filename, Encoding.UTF32));
DataContracetSerializer deser = new datacontracetserializer(typeof(Tree));
trr = (Tree)deserializer.readObject(reader);
reader.close()
}