我正在开发一个从对象生成xml文件的小应用程序。 我已经在主题中阅读了文章和许多其他内容,到目前为止,一切都进行了 好。 但是,当我想初始化更多相同类型的实例时,我就是不能这样做。
这是基类:
public class manifest
{
public metaObject meta { get; set; }
public optionsObject options { get; set; }
public datasourcesObject datasources { get; set; }
public usersObject users { get; set; }
}
我可以很好地制作对象,我也可以添加一些数据:
manifest manifestobjektum = new manifest
{
meta = new metaObject
{
... // it's OK
},
options = new optionsObject
{
... // it's OK
},
datasources = new datasourcesObject
{
.. // It's OK
},
users = new usersObject
{
user = new userObject
{
.. // it's OK
}
}
};
XmlSerializer serializer = new XmlSerializer(typeof(manifest));
serializer.Serialize(File.Create("testXMLfaszomat.xml"), manifestobjektum);
现在的问题是: 我想创建更多的用户对象(不知道多少),我该如何修改代码来实现这个目标呢? (users对象必须包含更多用户实例) 我认为这是一件容易的事情,我无法弄明白。
答案 0 :(得分:1)
要存储未知数量的对象实例,您可以使用List
。
因此,要添加更多用户,您的课程将变为:
public class manifest
{
public metaObject meta { get; set; }
public optionsObject options { get; set; }
public datasourcesObject datasources { get; set; }
public List<usersObject> users { get; set; }
}
您可以将初始化更改为以下内容:
users = new List<usersObject>
{
new userObject(),
new userObject(),
new userObject()
}
序列化程序可以正确处理List,因此没有什么可以改变这些行。 您可能还想在类中添加一个初始化List的构造函数:
public manifest()
{
user = new List<userObject>
}
因此您可以稍后添加用户,而无需在类初始化中明确地执行此操作。 例如,现在可以使用:
manifest someManifest = new manifest();
someManifest.users.Add(new userObject());
作为旁注,您应该考虑将UpperCamelCase用于您的类名和属性(manifest
将成为Manifest
),这是C#中非常常见的惯例。 / p>
答案 1 :(得分:0)
所以我要创建的XML表单:
<manifest>
<meta>
</meta>
<option>
</option>
<datasource>
</datasource>
<users>
<user>
</user>
...
<user>
</user>
</users>
</manifest>
为了实现这个目的,我创建了manifestObject:
public class manifest
{
public metaObject meta { get; set; }
public optionsObject options { get; set; }
public datasourcesObject datasources { get; set; }
public usersObject users { get; set; }
}
usersObject看起来像:
public class usersObject
{
public List<userObject> user { get; set; }
}
但是当我尝试将数据填充到班级时:
users = new usersObject
{
user = new List<userObject>
{
}
}
VS不提供该类的任何字段,因此它没有看到它。 我真的不知道出了什么问题,现在脑子里一片混乱。 :)