应该是简单的xml反序列化

时间:2014-04-29 23:31:45

标签: c# xml

我不知道我在这里做错了什么,但每当我尝试反序列化我的xml对象时,所有的值都会出现空值。 我知道路径是正确的,代码是正确加载文档,但是当我尝试反序列化它时,一切都是空的。 谁能告诉我我在这里做错了什么?

我的xml结构:

<settings>
    <settingsList>
        <setting>
            <name>ConnectionString</name>
            <value>testconnectionstring</value>
        </setting>
    </settingsList>
</settings>

Settings.cs:

[DataContract]
[Serializable()]
[XmlRoot(ElementName = "settings")]
public class Settings
{
    [DataMember]
    [XmlElement("settingsList")]
    public List<Setting> SettingsList { get; set; }
}

Setting.cs:

[DataContract]
[Serializable()]
[XmlRoot(ElementName = "setting")]
public class Setting
{
    [DataMember]
    [XmlElement("name")]
    public string Name { get; set; }
    [DataMember]
    [XmlElement("value")]
    public string Value { get; set; }
}

最后,我的反序列化代码:

var xml = XDocument.Load(docPath);
var serializer = new XmlSerializer(typeof(Settings));
var settings = (Settings)serializer.Deserialize(xml.CreateReader());

2 个答案:

答案 0 :(得分:1)

您需要使用XmlArray和XmlArrayItem:

    [DataMember]
    [XmlArray("settingsList")]
    [XmlArrayItem("setting")]
    public List<Setting> SettingsList { get; set; }

答案 1 :(得分:0)

我认为问题出在这里:[XmlRoot(ElementName = "setting")]在setting.cs.我认为它必须是[XmlRoot(ElementName = "settingList")] coz设置列表是所有设置的父级。 试一试。