[英]C# class serializing
我正在开发一个小的应用程序,它可以从一个对象生成一个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);
现在的问题是:我想创建更多的用户对象(不知道多少),我应该如何修改代码以达到此目的? (用户对象必须包含更多的用户实例)我认为这是一件容易的事,我只是想不通。
要存储未知数量的对象实例,可以使用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#中非常常见的约定。
因此,我想创建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没有提供该类的任何字段,因此看不到它。 我真的不知道出什么问题了,现在我的头大乱了。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.