让我说我有这个模型
class Color
{
string name;
string type;
}
Class ColorsList
{
List<Color>;
}
我需要将这些类填充到xml
<ColorsList>
<Color>red
<type>brush</type>
</Color>
<Color>blue
<type>spray</type>
</Color>
</ColorsList>
我无法改变我的类结构,因为我可以将它绑定到网格控件。
这种事情的最佳做法是什么?有一个简单的方法吗?我正在考虑为xml创建一个不同的模型..
答案 0 :(得分:1)
如果属性是公共的,则可以使用XmlSerializer和DataContractSerializer。他们将创建一个比你描述的更大,更丑陋的XML。
如果必须序列化非公共属性,仍然可以使用DataContractSerializer(Can an internal setter of a property be serialized?)。
用法示例 -
http://msdn.microsoft.com/en-us/library/bb675198.aspx
http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm
2注意事项 -
<强>更新强>
刚刚注意到.net 2.0的限制。 DataContractSerializer需要.net 3.0及更高版本。
答案 1 :(得分:0)
如果那些不相关,请将XmlWriterSettings和XmlSerializerNamespaces剥离出示例。
public class Color
{
[XmlText]
public string Name { get; set; }
[XmlElement(ElementName = "type")]
public string Type { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Color> colorlist = new List<Color>();
colorlist.Add(new Color() { Name = "red", Type = "brush" });
colorlist.Add(new Color() { Name = "blue", Type = "spray" });
XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
xws.Encoding = Encoding.UTF8;
xws.Indent = true;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
StringBuilder output = new StringBuilder();
using(var wr = XmlWriter.Create(output, xws))
{
XmlSerializer ser = new XmlSerializer(typeof(List<Color>), new XmlRootAttribute("ColorsList"));
ser.Serialize(wr, colorlist, ns);
}
Console.WriteLine(output.ToString());
Console.ReadLine();
}
}