控制列表的XML序列化<>派生类

时间:2011-06-19 01:13:18

标签: c# xml serialization

我正在将Dictionary对象转换为List<>派生类通过以下两个声明:

[Serializable]
public class LogItem
{
    public string Name { get; set; }
    public string Value { get; set; }

    public LogItem(string key, string value)
    {
        Name = key; Value = value;
    }

    public LogItem() { }
}

public class SerializableDictionary : List<LogItem>
{
    public SerializableDictionary(Dictionary<string, string> table)
    {
        IDictionaryEnumerator index = table.GetEnumerator();
        while (index.MoveNext())
        {
            Put(index.Key.ToString(), index.Value.ToString());
        }
    }

    private void Put(string key, string value)
    {
        base.Add(new LogItem(key, value));
    }
}

我打算通过以下代码序列化SerializableDictionary

SerializableDictionary log = new SerializableDictionary(contents);
using (StringWriter xmlText = new StringWriter())
{
    XmlSerializer xmlFormat =
        new XmlSerializer(typeof(SerializableDictionary), new XmlRootAttribute("Log"));
    xmlFormat.Serialize(xmlText, log);
}

工作正常,但我无法更改XML格式。

此XML文档旨在发送到xml数据库字段,并不打算反序列化。

  • 我宁愿同时拥有名字和价值 格式化为的属性 LogItem元素。

但是,任何使用XMLAttribute的尝试都会导致Reflection或编译错误。我不知道我能做些什么才能达到这个要求。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以使用XmlAttribute注释它们:

[Serializable]
public class LogItem
{
    [XmlAttribute]
    public string Name { get; set; }
    [XmlAttribute]
    public string Value { get; set; }

    public LogItem(string key, string value)
    {
        Name = key; Value = value;
    }

    public LogItem() { }
}

这对我来说很好,并产生了以下XML(基于示例输入):

<?xml version="1.0" encoding="utf-16"?>
<Log xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <LogItem Name="foo" Value="bar" />
  <LogItem Name="asdf" Value="bcxcvxc" />
</Log>

答案 1 :(得分:1)

除了你所展示的内容之外,还有其他事情要发生。无论是否将XmlAttribute属性应用于Name和Value属性,我都可以编译和执行上面的代码。

[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string Value { get; set; }