gpt4 book ai didi

c# xml serialization 自定义 elementName

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:12 24 4
gpt4 key购买 nike

我正在尝试将类对象序列化为如下所示的 xml:

<Colors>
<Blue>
<R>0,000</R>
<G>0,000</G>
<B>1,000</B>
<A>1,000</A>
</Blue>
<Red>
<R>1,000</R>
<G>0,000</G>
<B>0,000</B>
<A>1,000</A>
</Red></Colors>

重要的是没有直接指定蓝色和红色。我有这样一个类:

public class Color
{
[XmlElement("R")]
public string red;

[XmlElement("G")]
public string green;

[XmlElement("B")]
public string blue;

[XmlElement("A")]
public string alpha;
}

我需要的是一种方法来创建 Color 类对象的实例并使用不同的名称将它们序列化,例如 blue, red, green, anothercolor1, anothercolor2, ...还必须能够在程序运行时动态添加新颜色。

我知道我可以向 Color 类添加属性,但我无法更改 xml 的布局,所以我必须找到另一种方法。

有什么想法吗?

最佳答案

最好的办法是对 get all the properties 使用反射Color 类并遍历它们:

public void SerializeAllColors()
{
Type colorType = typeof(System.Drawing.Color);
PropertyInfo[] properties = colorType.GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (PropertyInfo p in properties)
{
string name = p.Name;
Color c = p.GetGetMethod().Invoke(null, null);

//do your serialization with name and color here
}
}

编辑:如果您无法控制更改 XML 格式并且您知道格式不会更改,您还可以自己硬编码序列化:

在 foreach 循环之外:

string file = "<Colors>\n";

在循环中:

file += "\t<" + name + ">\n";
file += "\t\t<R>" + color.R.ToString() + "</R>\n";
file += "\t\t<G>" + color.G.ToString() + "</G>\n";
file += "\t\t<B>" + color.B.ToString() + "</B>\n";
file += "\t\t<A>" + color.A.ToString() + "</A>\n";
file += "\t</" + name + ">\n";

最后:

file += "</Colors>"
using (StreamWriter writer = new StreamWriter(@"colors.xml"))
{
writer.Write(file);
}

根据需要将 \n 替换为 \r\nEnvironment.NewLine

关于c# xml serialization 自定义 elementName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8700723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com