您的位置:首页 > Web前端 > JavaScript

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

2012-08-02 14:37 369 查看
在写 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中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: