Silverlight 加载JSON文件 以及反序列化

在写 Silverlight Demo的过程中,由于不想涉及到数据库的东西,于是把数据存储在JSON的配置文件中,通过加载并解析 JSON文件来实现加载数据到前端

首先建立silverlight 应用程序 在  Web 工程中增加一个文本文件 命名为 json.txt,输入如下内容

[{"contryname" : "日本", "capital" : "东京"},
{"contryname" : "中国", "capital" : "北京"},
{"contryname" : "美国", "capital" : "华盛顿"},
{"contryname" : "印度", "capital" : "新德里"}]

在Silverlight 的工程里面 使用webclient加载 json文件。

  private void button1_Click(object sender, RoutedEventArgs e)
        {
            Uri serviceuri = new Uri("http://localhost:38716/json.txt");
            WebClient downloader = new WebClient();
            downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted);
            downloader.OpenReadAsync(serviceuri);
        }

        void downloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            StreamReader reader = new StreamReader(e.Result);
           
          //  MessageBox.Show(reader.ReadToEnd());
            JsonArray jdata =(JsonArray) JsonArray.Parse(reader.ReadToEnd());
           
        }

这样 JSON对象数组就保存到了 jdata里面 可以使用 foreach 来进行遍历

 foreach (JsonObject j in jdata)
            {
                MessageBox.Show(j["国家"]);
            }
 
   在 .NET 的WEB 开发后台中我们可以使用JavaScriptSerializer 来进行序列化和反序列化,然后再SL中却无法使用这个类 
  
protected void Page_Load(object sender, EventArgs e)
{
Personnel personnel = new Personnel();
personnel.Id = 1;
personnel.Name = "小白";


JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
//执行序列化
string r1 = jsonSerializer.Serialize(personnel);

//执行反序列化
Personnel _Personnel = jsonSerializer.Deserialize<Personnel>(r1);
}

不过可以使用DataContractJsonSerializer 来实现,注意要在在Silverlight端引入System.ServiceModel.Web.dll和System.Runtime.Serialization.dll,



       public class country
        {
      pubulic      string contryname { set; get; }
       public      string capital { set; get; }
        }

由于我传递时是一个JSOn对象的数组,所以我 们将或得到的数据序列化为 List 对象
 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(List<country>));
            List<country> ls = js.ReadObject(e.Result) as List<country>;
            foreach (country c in ls)
            {
                MessageBox.Show(c.contryname);
            }


如果我们要将 List 对象 序列化为字符串呢。如下

 
  DataContractJsonSerializer js2=new DataContractJsonSerializer(typeof(List<country>));
  MemoryStream stream = new MemoryStream();
  js2.WriteObject(stream, ls);
  string s = Encoding.UTF8.GetString(stream.ToArray(),0,stream.ToArray().Length);

 

JSON对象数组字符串则保存在 变量s中




你可能感兴趣的:(json,Stream,list,String,object,silverlight)