2013-11-15 26 views
1

我正在开发一个小应用程序,用于生成一个对象的xml文件。 我已经阅读了主题中的文章和许多其他内容,到目前为止,所有内容都很顺利地变成了 。 但是,当我想要初始化更多相同类型的实例时,我无法做到这一点。C#类的序列化

这是基础类:

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); 

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

+0

向我们展示usersObject的定义,因此我们知道您如何处理用户。它应该可能是userObject的列表 – NoLifeKing

+0

不知道我是否知道它,但是你不能仅仅在'userObject'类中将'user'对象作为'List '?或者更好的是,不是'usersObject',而是直接创建一个'List '。然后,您可以添加一个XML序列化属性,指定您有一个列表。 –

+0

你的意思是说你的'usersObject'类中有'List '列表吗?你可以做到这一点,串行器将能够处理它 –

回答

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() 
} 

串行器能够正确地处理名单,所以没有什么改变这些线路。 您可能还需要补充一点,初始化列表中的类空构造函数:

public manifest() 
{ 
    user = new List<userObject> 
} 

这样你就可以在以后添加用户,而无需在类初始化明确地这样做。 例如,这将现在的工作:

manifest someManifest = new manifest(); 
someManifest.users.Add(new userObject()); 


作为一个侧面说明,你应该考虑使用UpperCamelCase为您的类名和属性(manifest将成为Manifest),它是在C#中一个很常见的约定。

+0

啊,但我只需要在许多实例的用户。如果我创建一个Manifest列表,整个对象将会重复是不是? (顺便说一下thx的意见:)) – SecThor

+0

@Mhorpheus哦!我想我读了你的问题都是错的。所以你想添加更多的“用户”实例到您的清单中,而不是更多的清单? –

+0

正确:)对不起,错误的问题:) – SecThor

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没有提供类中的任何字段,所以它没有看到它。 我真的不知道什么是错的,现在我脑子里一团糟。 :)