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

そして今、質問: ユーザー オブジェクトをさらに作成したいのですが (どのくらいかわかりません)、これを達成するためにコードをどのように変更すればよいでしょうか? (users オブジェクトには user のインスタンスをさらに含める必要があります) 簡単なことだと思いますが、わかりません。

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 に答える