在C#中反序列化XML数组时的默认值

时间:2016-08-18 08:55:50

标签: c# arrays xml serialization

我使用System.Xml.Serialization库来反序列化包含一组节点的XML结构。当没有节点时,我得到数组的值为null,但我希望默认值为空数组。实现这一目标的最佳方法是什么?我试图使用属性的默认值,但这似乎不适用于数组。

这是我试图反序列化的数据结构:

public class MyData
{
    [System.Xml.Serialization.XmlElement("Node")]
    public Node[] Nodes { get; set; } = new Node[] {};
}

public class Node
{
    public string Id { get; set; } = "DefaultId";
}

反序列化以下XML在Nodes属性中给出了一个空值:

<MyData/>

反序列化以下XML给出了一个长度为1的数组,其中元素的Id设置为&#34; DefaultId&#34;。

<MyData> <Node/> </MyData>

1 个答案:

答案 0 :(得分:1)

它不是特定的反序列化问题 - 只需创建一个支持私有变量并在需要时更改您的Getter以创建默认值。

public class MyData
{
    private Node[] nodes = null;
    [System.Xml.Serialization.XmlElement("Node")]
    public Node[] Nodes 
    {  
        get { 
                if(nodes == null) 
                {
                    nodes = new Node[];
                }
                return nodes;
            }
        set { nodes = value ; }
    } 
}