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文件。
这样 JSON对象数组就保存到了 jdata里面 可以使用 foreach 来进行遍历
不过可以使用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 对象
如果我们要将 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中
首先建立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中
相关文章推荐
- [Python进阶-7]文件和目录的IO操作,以及json序列化和反序列化
- Unity JSON文件的写入(序列化)与读取(反序列化)、以及自定义JSON编辑器
- cocos2dx中.json和.plist以及.xml文件格式生成加载的不同
- PHP 命名空间以及自动加载(自动调用的函数,来include文件)
- 未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0
- 解决 Silverlight 调用 WCF 服务 跨域访问 和 Silverlight 引用服务后配置文件不加载的问题
- ios json文件加载动态图,让app真正动起来
- spket的安装使用以及加载ext-4.0.0.jsb2文件
- Silverlight2.0动态加载xap文件
- mybatis的mapper映射文件的加载(resource方式,class方式,以及包扫描)
- Obj-C,文件加载与保存、序列化/反序列化
- 更新Newtonsoft.Json后报异常,未能加载文件或程序集“Newtonsoft.Json
- Log4j配置文件解析以及加载自己的配置文件
- 未能加载文件或程序集 newtonsoft.json,version=4.5.0.0
- 稳扎稳打Silverlight(31) - 2.0Tip/Trick之加载XAP, 加载XAML, 加载DLL, AppManifest.xaml文件说明, 自定义鼠标指针
- 省市区县三级联动,用json文件本地加载
- zf加载js以及css文件
- 浏览器 chrome 360等 加载本地json 或者xml 文件
- Android加载asset下的json文件
- NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON