1

Windows 8 で C# を使用してプログラミングを学習しています。その過程で多くのチュートリアル ( http://msdn.microsoft.com/en-us/library/windows/apps/hh986968.aspxなど) に取り組み、データ ストレージを示す単純なアプリを作成しようとしています。私が見つけたすべての例は、単純な文字列のみをローミング ストレージに格納しています。そこにもっと複雑なデータを保存する方法はありますか?

例: 名前と年齢を持つ基本クラス Person のリスト。私はそれを次のようにしようとしました:

データの保存:

roamingSettings.Values["peopleList"] = 人;

データのロード:

people = (List)roamingSettings.Values["peopleList"];

WinRT 情報: アプリケーション データ ストアに書き込む値をシリアル化しようとしてエラーが発生しました。データを保存すると、「このタイプのデータはサポートされていません」というエラーが表示されます

したがって、保存できるのは文字列値だけかもしれませんが、どこにも指定されていません。

4

1 に答える 1

4

はい、値をコレクションとして raoming データに保存できます。あなたの問題の解決策は ApplicationDataCompositeValue class

詳細については、 http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdatacompositevalue.aspxを参照してください。

あなたが言及したように、あなたは C# で開発しています。以下は私が想像した問題のコードです。2 つのメンバーを持つ Person クラスがあります。

class person
{
int PersonID;
string PersonName
}

さて、このクラスの値を読み書きするためのコードは次のとおりです

まず、Window クラスのコンストラクターで、InitializeComponent(); の下に、ローミング設定のオブジェクトを作成します。

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;

コンポジションに書き込むには、次のコードを使用します

void write (Person Peopleobj)
{
Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["PersonID"] = Peopleobj.PersonID;
composite["PersonName"] = Peopleobj.PersonName;
roamingSettings.Values["classperson"] = composite;
}

Person オブジェクトを読み取るには、次のコードを使用します

void DisplayOutput()
    {
        ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)roamingSettings.Values["classperson"];

        if (composite == null)
        {
            // "Composite Setting: <empty>";
        }
        else
        {
        Peopleobj.PersonID = composite["PersonID"] ;
        Peopleobj.PersonName = composite["PersonName"];

        }

         }
于 2012-11-20T13:18:28.410 に答える