1

我正在开发一个从对象生成 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);

现在的问题是:我想创建更多用户对象(不知道多少),我应该如何修改代码来实现这一点?(用户对象必须包含更多用户实例)我认为这是一件容易的事情,我只是想不通。

4

2 回答 2

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# 中非常常见的约定。

于 2013-11-15T10:38:36.930 回答
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 不提供类中的任何字段,因此它看不到它。我真的不知道怎么了,现在脑子里一片混乱。:)

于 2013-11-18T09:59:50.293 回答