C# 在对象列表中指定特性
我有一个需要指定多个属性的对象列表 虽然我怀疑数据的来源是否重要,但我会将其作为背景资料。我正在使用foreach循环从XmlDocument中的选择节点读取属性列表。我已经创建了一个循环迭代器,并尝试根据attribute.Name和attribute.Value将值分配给每个对象中的属性C# 在对象列表中指定特性,c#,list,foreach,C#,List,Foreach,我有一个需要指定多个属性的对象列表 虽然我怀疑数据的来源是否重要,但我会将其作为背景资料。我正在使用foreach循环从XmlDocument中的选择节点读取属性列表。我已经创建了一个循环迭代器,并尝试根据attribute.Name和attribute.Value将值分配给每个对象中的属性 // Reads each attribute: label, type, number etc... foreach (XmlNode node in myValues.SelectNodes("
// Reads each attribute: label, type, number etc...
foreach (XmlNode node in myValues.SelectNodes("//Properties"))
{
foreach (XmlAttribute attribute in node.Attributes)
{
//this iterates through the attributes just fine
//and in each iteration attribute.Name = the property
//I want to set and attribute.Value = the value to set it to.
myList[i].label = attribute.Value; //works
//what I'd like to do something like
myList[i].attribute.Name = attribute.Value;
它快把我逼疯了。必须有某种方法引用属性的值。名称 首先需要找到要更新循环中属性的对象。你可以使用LINQ,因为它已经回答了多次@SO like,在这篇文章中:
然后可以更新属性…首先需要找到要在循环中更新属性的对象。你可以使用LINQ,因为它已经回答了多次@SO like,在这篇文章中:
然后您可以更新属性…您可以使用反射按属性名称设置属性,例如:
var current = myList[i];
current.GetType().GetProperty(attribute.Name).SetValue(current, attribute.Value);
可以使用反射按属性名称设置属性,例如:
var current = myList[i];
current.GetType().GetProperty(attribute.Name).SetValue(current, attribute.Value);
您可以将XML文档反序列化为POCO对象。我个人喜欢这种方法而不是反思,它让我更能控制正在发生的事情,更容易看到 最大的问题是创建要反序列化到的POCO对象 VisualStudio的一个很酷的特性(现在是2015年,不确定它是什么时候推出的),您可以“将XML粘贴为类”
字节的字段。。我必须在后记中将这些字段更改为int
s。这是一个快速查找和替换的过程,但如果遇到d,这是一个重要的步骤e工业化问题
生成类后,只需进行简单的反序列化,下面是一些示例代码:
//Object to deserialize into
MySerializableClass myObject;
//Create deserializer for object
XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass));
//Open XML file to read
using (FileStream myFileStream = new FileStream("myFileName.xml", FileMode.Open))
{
//Deserialize XML into your POCO object
myObject = (MySerializableClass) mySerializer.Deserialize(myFileStream);
}
然后您可以使用该对象并获得所需的值。您可以将XML文档反序列化为POCO对象。我个人喜欢这种方法而不是反射,它使我能够更好地控制正在发生的事情,并且更易于查看
最大的问题是创建要反序列化到的POCO对象
VisualStudio的一个很酷的特性(现在是2015年,不确定它是什么时候推出的),您可以“将XML粘贴为类”
将目标XML文档复制到复制缓冲区(ctrl+c)
在Visual Studio中打开新的类文件
在名称空间内部,但不是类(这将创建类)放置游标
使用菜单编辑->粘贴特殊->将XML粘贴为类
然后您应该会看到Visual Studio生成的类。注意:我发现,当它看到一个数字时,如果数字小于255,它将创建一个字节的字段。。我必须在后记中将这些字段更改为int
s。这是一个快速查找和替换的过程,但如果遇到d,这是一个重要的步骤e工业化问题
生成类后,只需进行简单的反序列化,下面是一些示例代码:
//Object to deserialize into
MySerializableClass myObject;
//Create deserializer for object
XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass));
//Open XML file to read
using (FileStream myFileStream = new FileStream("myFileName.xml", FileMode.Open))
{
//Deserialize XML into your POCO object
myObject = (MySerializableClass) mySerializer.Deserialize(myFileStream);
}
然后,您可以使用对象并获得所需的值。您可以使用反射,但听起来您真正需要做的是将XML反序列化为POCO:您可以使用反射,但听起来您真正需要做的是将XML反序列化为POCO: