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