我曾经将控制信息存储在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?
答案 0 :(得分:1)
好的我在这里理解,我想给出答案,你可以为你的xml对象创建等价的类。
Lable对象的等效类
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);