C # System.Xml.Serialization Самостоятельные вложенные элементы - PullRequest
3 голосов
/ 17 мая 2010

Я пытаюсь десериализовать

<graph>
<node>
   <node>
     <node></node>
   </node>
</node>
<node>
   <node>
     <node></node>
   </node>
</node>
</graph>

с

[XmlRoot("graph")]
class graph
{
   List<Node> _children = new List<node>();

   [XmlElement("node")]
   public Node[] node
   {
      get { return _children.ToArray(); }
      set { foreach(Node n in value) children.add(n) }
   };
}

class Node
{
   List<Node> _children = new List<node>();

   [XmlElement("node")]
   public Node[] node
   {
      get { return _children.ToArray(); }
      set { foreach(Node n in value) children.add(n) }
   };
}

но он продолжает говорить, что объект не создан, при попытке установить дочерние узлы встречается нулевая ссылка Что не так выше?

Заранее спасибо ~

Ответы [ 2 ]

1 голос
/ 17 мая 2010

Ваш вопрос находится в наборе обработчиков, добавьте, если не ноль:

set { if(value != null) foreach(Node n in value) children.add(n) }
1 голос
/ 17 мая 2010

Я не могу воспроизвести вашу ошибку. Я использовал следующий код:

string xml = @"<graph>
<node>
   <node>
     <node></node>
   </node>
</node>
<node>
   <node>
     <node></node>
   </node>
</node>
</graph>";

[XmlRoot("graph")]
public class graph
{
    [XmlElement("node")]
    public Node[] node;
}

public class Node
{
    [XmlElement("node")]
    public Node[] children;
}

XmlSerializer serializer = new XmlSerializer(typeof(graph));

using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
{
    writer.Write(xml.Replace(Environment.NewLine, String.Empty));
    writer.Flush();
    stream.Position = 0;

    var graph = serializer.Deserialize(stream) as graph;
}

Можете ли вы опубликовать то, что вы используете для десериализации?

...