将XML反序列化为树

本文关键字:反序列化 XML | 更新日期: 2023-09-27 18:16:28

我有以下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;}
}

将XML反序列化为树

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()
}

选择编码

相关文章: