2013-03-05 38 views
1

我用来存储在XML文件中的控制信息,例如:如何将控件序列化为JSON?

<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一个去。这似乎有点容易...

现在,鉴于上面的代码,我能够创建一个类类型的人,和序列化对象,并将其写入文件(或控制台 - 无论):

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

我能问你需要什么用的? – tucaz 2013-03-05 18:59:10

+0

我有一个应用程序,允许其用户重新排列整个用户界面到他们的喜好,所以这就是为什么我需要保存控制信息和状态到文件并能够再次检索它。 – James 2013-03-05 19:06:40

回答

1

好的我在这里理解,我想给出答案,你可以为你的xml对象创建等价的类。对于拉布勒对象

等价类

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

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

    [DataMember] 
    string FontStyle{get;set;} 

} 

等价类控制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); 
+0

有趣的方法。我现在正在尝试。谢谢@Sachin。 – James 2013-03-05 19:04:40

+0

@JasonVoorhees嘿,我已经更新了我的代码,并为你明确了模式,现在你可以轻松搞定它:) – Sachin 2013-03-05 19:07:19

+0

非常感谢@Sachin,这非常有帮助! :-) – James 2013-03-05 19:11:16