1

以下のように、コントロール情報を XML ファイルに保存していました。

<Controls>
    <Label Id="heading" Text="This is a heading!" FontStyle="(FontStyleDataHere)" Location="20, 10" />
    <Label Id="bodyText" Text="This is Body text." FontStyle="(FontStyleDataHere)" Location="20, 70" />
</Controls>

昨年持っていたコードの多くのページの印刷版を探していましたが、それが唯一のバックアップであり、今は見つかりません。

どうやってこれをやったのか覚えていないので、XML は信じられないほど退屈だといつも感じていました。そこで、JSON を試してみませんか。だいぶ楽になったような…

上記のコードを考えると、Person 型のクラスを作成し、オブジェクトをシリアライズしてファイル (またはコンソールなど) に書き込むことができました。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;

namespace SerializeToJson
{
    class Program
    {
        [DataContract]
        internal class Person
        {
            [DataMember]
            internal String Name;

            [DataMember]
            internal Int32 Age;
        }

        static void Main(string[] args)
        {
            Person person = new Person()
            {
                Name = "Jason rules.",
                Age = 19
            };

            MemoryStream stream = new MemoryStream();
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
            serializer.WriteObject(stream, person);

            stream.Position = 0;

            StreamReader reader = new StreamReader(stream);
            Console.Write("Json form of Person object: ");
            Console.WriteLine(reader.ReadToEnd());

            Console.ReadKey();
        }
    }
}

しかし、問題は、コントロールを Json にシリアル化する方法がわからないことです。そして、これは私が本当に必要としているものです。そして、明らかに、実行時に再作成できるように、後でシリアル化解除する必要があります。

JSON を使用してこれを行うことはできますか、それとも XML を引き続き使用することをお勧めしますか?

4

1 に答える 1

1

ここで私が理解していることはわかりました。答えを出そうとしています.xmlオブジェクトに同等のクラスを作成できます。

Label オブジェクトの同等クラス

Public class Lable
{
   [DataMember]
    String Id{get;set;};

    [DataMember]
     String Text {get;set;};

    [DataMember]
    string FontStyle{get;set;}

}

Control Obect の同等クラス

Public class Controls
{
   [DataMember]
   public List<Lable> Lables{ get;set; }
}

Controls次に、複数を含むオブジェクトをシリアル化する必要がありますLable

このように JavaScriptSerializer を使用してオブジェクトを単純にシリアル化できるようになりました

JavaScriptSerializer serializer = new JavaScriptSerializer();

シリアライゼーション :

 string jsonString = serializer.Serialize(objControls);

逆シリアル化:

Controls objControls=serializer.Deserialize<Controls>(jsonString);
于 2013-03-05T18:59:09.870 に答える