繁体   English   中英

C#类序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM