我正在将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数据库字段,并不打算反序列化。
但是,任何使用XMLAttribute的尝试都会导致Reflection或编译错误。我不知道我能做些什么才能达到这个要求。有人可以帮忙吗?
答案 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; }