2013-11-15 6 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

Не уверен, что у меня это получилось, но не можете ли вы просто сделать объект 'user' в своем классе' userObject' как 'List '?Или еще лучше, вместо 'usersObject', непосредственно создать« Список ». Затем вы можете добавить атрибут сериализации XML, указав, что у вас есть список. –

+0

Вы имеете в виду «Список ' в вашем классе 'usersObject'? Вы можете просто сделать это, и сериализатор сможет справиться с этим. –

ответ

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

Да, но мне нужно только пользователю во многих инстанции. Если я создам список манифеста, весь объект будет дублироваться, не так ли? (кстати thx за советом имена :)) – SecThor

+0

@Mhorpheus Oh! Я думаю, что я прочитал ваш вопрос, все неправильно. Итак, вы хотите добавить больше примеров «пользователей» в ваш манифест, а не больше манифестаций? –

+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 не предлагает никакого поля из класса, поэтому он не видит его. Я действительно не знаю, что не так, и теперь в моей голове большой беспорядок. :)

Смежные вопросы