Windows CE /SmartDeviceProject 操作Json数据实现对象序列化和反序列化
来源:互联网 发布:软件测试三角形问题 编辑:程序博客网 时间:2024/05/22 07:00
使用场景:实现Java对象的Json数据在C#中读取,重新封装为C#的对象,数据传递采用webservice方式,所有返回类型为int 、boolean 、String、long 等基础数据类型,避免传输复杂的java List和自定义对象;而String的格式就是熟悉的Json。 访问资源下载路径:http://jsoncf.codeplex.com/
源代码和编译后文件下载地址:http://jsoncf.codeplex.com/releases/view/18199?RateReview=true
在线代码阅读地址:http://jsoncf.codeplex.com/SourceControl/latest#ReadMe.txt
1、引用程序包
2、编写实体对象
using System;using System.Linq;using System.Collections.Generic;using System.Text;using CodeBetter.Json;namespace SmartDeviceProjectWtms.Domain{ [SerializeIncludingBase] class Demo { private int _id; private String _name; public int id { get { return _id; } set { _id = value;} } public String name { get { return _name;} set { _name = value;} } public Demo() { } public Demo(int _id,String _name) { id = _id; name = _name; } }}注:必须引用可序列化注解
3、反序列化封装工具
using System;using System.Linq;using System.Collections.Generic;using System.Text;using System.ComponentModel;using SmartDeviceProjectWtms.Domain;using CodeBetter.Json;namespace SmartDeviceProjectWtms{ class JsonUtil { public static string ReplaceSpecialChar(String jsonStr) { jsonStr = jsonStr.Replace("\\t", " "); jsonStr = jsonStr.Replace("null", "\"" + "null" + "\""); return jsonStr; } /************************************************测试例子**********************************/ /// <summary> /// 获取Demo属性的封装对象【例子】 /// </summary> /// <param name="jsonStr">Json对象字符串集合</param> /// <returns></returns> public static Demo GetDemoByJsonStr(String jsonStr) { Demo demo = Converter.Deserialize<Demo>(jsonStr,"_"); return demo; } /// <summary> /// 获取Demo属性的封装对象【例子】 /// </summary> /// <param name="jsonStr">Json对象字符串集合</param> /// <returns></returns> public static List<Demo> GetDemoListByJsonStr(String jsonStr) { List<Demo> list = Converter.Deserialize<List<Demo>>(jsonStr, "_"); return list; } }}注:ReplaceSpecialChar方法是处理Java javax.util.Date对象和值为空null的Json字符问题。
4、编写反序列测试类
using System;using System.Linq;using System.Collections.Generic;using System.Windows.Forms;using SmartDeviceProjectWtms.Domain;using CodeBetter.Json;namespace SmartDeviceProjectWtms{ class JsonTest { /// <summary> /// 测试【JSON单个对象】反序列化 /// </summary> public static void TestDemo2() { string jsonStr =@"{""id"":1,""name"":""boonya""}"; MessageBox.Show("{}JSon:" + jsonStr); Demo demo = JsonUtil.GetDemoByJsonStr(jsonStr); if (demo != null) { MessageBox.Show("{}获取Object:" + demo.id + " " + demo.name); } } /// <summary> /// 测试【JSON对象集合】反序列化 /// </summary> public static String TestDemo3() { string jsonStr = @"[{""id"":1,""name"":""boonya""}]"; List<Demo> dList = JsonUtil.GetDemoListByJsonStr(jsonStr); if (dList != null) { MessageBox.Show("[]JSon:" + jsonStr); foreach (Demo demo in dList) { MessageBox.Show("[]获取Object:" + demo.id + " " + demo.name); } } return jsonStr; } }}注:本例只是一个简单的例子,具体Java对象转过来的Json处理可能更为复杂,但处理基本一样。
5、Json包程序序列化和反序列化操作例子
namespace CodeBetter.Json.Test.Console{ using System; internal class Program { private static void Main(string[] args) { string json = Converter.Serialize(new User("name", "password", AccountStatus.Enabled)); Converter.Serialize("out.txt", new int[] { 1, 2, 3, -4 }, "_"); Console.WriteLine(json); User user = Converter.Deserialize<User>(json, "_"); int[] values = Converter.DeserializeFromFile<int[]>("out.txt", "_"); Console.WriteLine(user.UserName); Console.WriteLine("Done. Press enter to exit"); Console.ReadLine(); } } public class BaseUser { private int _id = 1; } [SerializeIncludingBase] public class User : BaseUser { private string _userName; private string _password; [NonSerialized] private readonly Role _role; private AccountStatus _status; private Thing _think = new Thing(); public string UserName { get { return _userName; } set { _userName = value; } } public string Password { get { return _password; } set { _password = value; } } public AccountStatus Status { get { return _status; } set { _status = value; } } public Role Role { get { return _role; } } public Thing Thing { get { return new Thing(); } } public User(string userName, string password, AccountStatus status) { UserName = userName; Password = password; Status = status; _role = new Role(DateTime.Now, "Admin", this); } private User() { } } public class Role { public Role(DateTime expires, string name, User user) { Expires = expires; Name = name; User = user; } public DateTime Expires { get; set; } public string Name { get; set; } public User User { get; set; } public Thing Thing { get { return new Thing(); } } } public class Thing { private string _name = "ABC"; public string Name { get { return _name; } set { _name = value; } } } public enum AccountStatus { Enabled = 1, Disabled = 2, }}
0 0
- Windows CE /SmartDeviceProject 操作Json数据实现对象序列化和反序列化
- .NET JSON对象序列化和反序列化
- json.net 对象序列化和反序列化
- Windows Phone 中Json序列化和反序列化
- JSON 对象序列化、反序列化
- C#序列、反序列化json对象
- C#操作Json的序列化和反序列化
- json数据的序列化和反序列化
- 利用DataContractJsonSerializer和范型实现JSon的序列化和反序列化操作
- java对象序列化和反序列化操作记录
- Json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- json序列化和反序列化
- Json序列化和反序列化
- json序列化和反序列化
- Newtonsoft.Json序列化和反序列
- Android 实现View中添加子元素的动态效果
- Mysql压测工具mysqlslap 讲解
- SQL语句执行效率及分析
- hdu 1058 Humble Numbers
- Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序
- Windows CE /SmartDeviceProject 操作Json数据实现对象序列化和反序列化
- SendMessage与PostMessage的区别
- 关于一个在Intellij Idea中打包正常,tomcat启动也正常,但在浏览器中访问出404的问题的原因分析
- 模态视图
- 《筑墙——只需一点点安全常识就能阻止网络犯罪》
- DOS命令窗口进行java类的打包编译命令
- 单反镜头手机适配器
- 黑马程序员-高新技术-代理
- http web服务器