使用场景:实现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, } }