最佳实践是创建一个C#对象,该对象反映并生成序列化字符串
本文关键字:对象 字符串 序列化 创建 一个 最佳 | 更新日期: 2023-09-27 18:09:09
这个问题以前可能被问过或回答过,但我觉得没有一个命中率真正适用。
我想创建一个具有属性的小类,这些属性将与xml流熟悉的输出中的名称和属性相对应。该类应该帮助程序创建一个类似xml的字符串。
string test = "<graph caption='SomeHeader' attribute9='#someotherinfo'>" +
"<set name='2004' value='37800' color='AFD8F8' />" +
"<set name='2005' value='21900' color='F6BD0F' />" +
"<set name='2006' value='32900' color='8BBA00' />" +
"<set name='2007' value='39800' color='FF8E46' />" +
"</graph>";
我想你已经明白了。我有一个静态数量的已知属性,将在标签中使用。这里唯一的标签是集和图。
,我想做这样的事情
Helper o = new Helper()
List<Tag> tag = new List<Tag>();
foreach (var someitem in somedatabaseresult)
{
tag.Add(New Graph() { Caption = someitem.field , attribute9 = someitem.otherField });
foreach (var detail in someitem)
{
tag.Add(new Set() { name = detail.Year, value = detail.Value color = detail.Color });
}
}
o.Generate(); // Which will create the structure of result sample above
// and for future extension..
// o.GenerateXml();
// o.GenerateJson();
请记住,这个代码是pesudo,只是从我的脑海中提取的。因此,我有了一些想法,但它需要一天的时间来编码和测试什么是最好的(或妓女(。
解决这项任务的最佳实践是什么?
[编辑]
这个神秘的"Helper"是一个(不幸键入的(类,它包含Graph列表、Set列表,并且(我认为(包含每个Graph/Set对象的所有可用属性。上面提到的foreach循环的工作是用数据填充Helper类。
[编辑2]此处显示结果,
https://gist.github.com/1233331
为什么不创建两个类:Graph和Set。图将具有List<Set>
的属性。
然后,在foreach
中,您可以创建一个实例或Graph,并将Set的实例添加到其列表中。
完成后,使用XML序列化程序将Graph对象序列化为XML。如果以后需要更改,也可以很容易地输出到另一种格式,例如序列化为JSON。
编辑以下评论:
从我的头顶上看,这可能不是100%正确的。。。
var myGraph = BuildMeAGraph();
var serializer = new XmlSerializer(typeof(Graph));
var writer = XmlWriter.Create("myfile.xml");
serializer.Serialize(writer, myGraph);
但是像这样的东西应该把它写在一个文件里。如果您想将XML存储在内存中,则将其写入基于内存流的XMLTextWriter,然后您可以将内容写入字符串变量或对其执行任何需要的操作。
如果你想在对象树之外创建一个XML,那么我认为,你可以尝试一下:
XDocument doc = new XDocument
(
somedatabaseresult.Select
( someitem =>
new XElement("graph",
new XAttribute("Caption", ""),
new XAttribute("attribute9", "#something"),
someitem.Select
(detail =>
new XElement("Set",
new XAttribute("name", "2003"),
new XAttribute("value", "34784"),
new XAttribute("color", "#003300")
)
)
);
//save to file as XML
doc.Save("output.xml");
//save to local variable as XML string
string test = doc.ToString();
我为标签编写了保存值,正如您在代码中所使用的那样。然而,我想你会喜欢这个:
new XAttribute("name", detail.name),
new XAttribute("value", detail.value),
new XAttribute("color", detail.color)
或者您想给对象detail
中的每个属性的任何值。
使用XmlSerializer。
我会使用ExpandoObject,但我看不出你这样做的原因。