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

Json序列化之.NET开源类库Newtonsoft.Json

2015-12-08 14:00 579 查看
上代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace JsonWithNewtonsoft
{
class Program
{
static void Main(string[] args)
{
//使用StringReader读取Json
string jsonText = @"{""Name"":""Jack"",""Age"":""22""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType + "\t" + reader.ValueType + "\t" + reader.Value);
}
Console.WriteLine();
//使用JObject读取Json
JObject jo = JObject.Parse(jsonText);
string[] values = jo.Properties().Select(item => item.Name.ToString() + ":" + item.Value.ToString()).ToArray();
foreach (string s in values)
{
Console.WriteLine(s);
}
Console.WriteLine();

//解析数组型数据
string jsonArrayText1 = "[{'Name':'Tom','Age':'16'},{'Name':'Mary','Age':'15'}]";
JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
string name1 = ja[1]["Name"].ToString();
Console.WriteLine("数组型数据取法一:" + name1);
Console.WriteLine();
JObject o = (JObject)ja[1];
string name2 = o["Name"].ToString();
Console.WriteLine("数组型数据取法二:" + name2);
Console.WriteLine();

//嵌套格式
string jsonTexta = "{\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}";
JObject jsonObjt = JObject.Parse(jsonTexta);
string zone = ((JObject)jsonObjt["shanghai"])["zone"].ToString();
string zoneEn = ((JObject)jsonObjt["shanghai"])["zone_en"].ToString();
Console.WriteLine(zone + "," + zoneEn);

string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}";
JObject jsonObj = JObject.Parse(jsonData);
string namea = jsonObj["name"].ToString();
string age = jsonObj["age"].ToString();
string city = ((JObject)jsonObj["addr"])["city"].ToString();
string province = ((JObject)jsonObj["addr"])["province"].ToString();
Console.WriteLine(namea + "," + age + "," + city + "," + province);
Console.WriteLine(GetJsonValue(jsonObj.Children(), "province"));
Console.WriteLine();

string jsonDatab = "{\"addr\":[{\"city\":\"guangzhou\",\"province\":\"guangdong\"},{\"city\":\"guiyang\",\"province\":\"guizhou\"}]}";
JObject jsonObjm = JObject.Parse(jsonDatab);
JArray jar = JArray.Parse(jsonObjm["addr"].ToString());
JObject j = JObject.Parse(jar[0].ToString());
Console.WriteLine(j["city"]);

//序列化Json
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("Name");
writer.WriteValue("Jack");
writer.WritePropertyName("Age");
writer.WriteValue("26");
writer.WriteEndObject();
writer.Flush();
string jsonTextb = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonTextb);
Console.WriteLine();

//序列化Student类
Student stu = new Student() { Name="Jack",Age=20};
JsonSerializer serializer=new JsonSerializer();
StringWriter strw=new StringWriter();
serializer.Serialize(new JsonTextWriter(strw),stu );
Console.WriteLine(strw.GetStringBuilder().ToString());

//反序列化Student类
StringReader sr=new StringReader(strw.GetStringBuilder().ToString());
Student st = (Student) serializer.Deserialize(new JsonTextReader(sr), typeof (Student));
Console.WriteLine(st.Name + "=>" + st.Age);
Console.WriteLine();

//反序列化类
//定义一个JSON字符串
string jsonTextc = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
//反序列化JSON字符串,将JSON字符串转换成LIST列表
List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonTextc);
//读取列表中的值
Console.WriteLine(_list[1].a);   //输出结果:aaa2
foreach (Customer c in _list)
{
Console.WriteLine(c.c);  //输出结果ccc  ccc2
}
Console.WriteLine();

//序列化集合列表
List<Student> students=new List<Student>();
Student stu1=new Student(){Name="Jack",Age=20};
Student stu2=new Student(){Name="Tom",Age=21};
students.Add(stu1);
students.Add(stu2);
JsonSerializer serializer1=new JsonSerializer();
StringWriter strw1=new StringWriter();
serializer.Serialize(new JsonTextWriter(strw1),students);
Console.WriteLine(strw1.GetStringBuilder().ToString());
Console.WriteLine();

List<Student2> student2s=new List<Student2>();
Student2 stu3=new Student2(){Name="Jack",Age=20,Phones = new List<string>{"18627900216","18571643691"}};
Student2 stu4 = new Student2() { Name = "Tom", Age = 21, Phones = new List<string> { "15972944805", "13349855388" } };
student2s.Add(stu3);
student2s.Add(stu4);
JsonSerializer serializer2=new JsonSerializer();
StringWriter strw2=new StringWriter();
serializer2.Serialize(new JsonTextWriter(strw2),student2s);
Console.WriteLine(strw2.GetStringBuilder().ToString());

Console.Read();
}

/// <summary>
/// 遍历动态json对象
/// </summary>
/// <param name="jToken">json对象的集合</param>
/// <param name="key">json对象的属性</param>
/// <returns>json对象的值</returns>
public static string GetJsonValue(JEnumerable<JToken> jToken, string key)
{
IEnumerator enumerator = jToken.GetEnumerator();
while (enumerator.MoveNext())
{
JToken jc = (JToken) enumerator.Current;

if (jc is JObject || ((JProperty) jc).Value is JObject)
{
return GetJsonValue(jc.Children(), key);
}
else
{
if (((JProperty) jc).Name == key)
{
return ((JProperty) jc).Value.ToString();
}
}
}
return null;
}

/// <summary>
/// Student类,序列化时用
/// </summary>
public class Student
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}
/// <summary>
/// 修改Studnet类,添加电话号码字段
/// </summary>
public class Student2
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
//电话集合
public List<string> Phones { get; set; }
}

/// <summary>
///Customer 的摘要说明
/// </summary>
public class Customer
{
//在序列化前后没有变动
public string a
{ get; set; }
//在序列化前后设置和重置
public string b
{ get; set; }
//设置为null,但在序列化后填充
public string c
{ get; set; }
public string Other
{ get; set; }
public Customer()
{
//
//TODO: 在此处添加构造函数逻辑
//
a = "";
b = "";
c = "";
Other = null;
}
}

//应用实例:
//result.Data.PayHtml = JsonConvert.DeserializeObject<WxPayHtml>(implResult.ReturnValue.PayInfo.Replace("package", "packagevalue"));

//public class WxPrePayIdResponse
//{
//    public WxPayHtml PayHtml { get; set; }
//}

///// <summary>
///// 微信要序列成对象的实体参数
///// </summary>
//public class WxPayHtml
//{
//    public string appid { get; set; }
//    public string partnerid { get; set; }
//    public string prepayid { get; set; }
//    public string noncestr { get; set; }
//    public string timestamp { get; set; }
//    public string appkey { get; set; }
//    public string packagevalue { get; set; }
//    public string sign { get; set; }
//}

/*"PayHtml": {
"appid": "wx257b0d84993abd65",
"partnerid": "1223710101",
"prepayid": "8201038000151225260ec7a972158a17",
"noncestr": "41c542dfe6e4fc3deb251d64cf6ed2e4",
"timestamp": "1451053391",
"appkey": "4VAICNn3cH84oUgvIPiQiRFCxYTmvCMqGl4Afk4dxZsgXGCudgf8tvkKPU40HAXa4M4NOCTN9o4NqbSD7Vo3jd9w3ulZ4l69BG0xlpAQYyjDVMk9brEv4v7HA2kswARc",
"packagevalue": "Sign=WXPay",
"sign": "e0c1075e4f53f8ed40d37719c3a2a4bac8994f23"
}*/

}
}


上效果:



上附件:

点击下载

引用 System.Web.Extensions

/// <summary>
/// JSON Serializer using JavaScriptSerializer
/// </summary>
public class DefaultJsonSerializer : IJsonSerializer
{
private readonly JavaScriptSerializer serializer = new JavaScriptSerializer();

/// <summary>
/// Serialize an object to JSON string
/// </summary>
/// <param name="obj">object</param>
/// <returns>JSON string</returns>
public string Serialize(object obj)
{
return serializer.Serialize(obj);
}

/// <summary>
/// Deserialize a JSON string to typed object.
/// </summary>
/// <typeparam name="T">type of object</typeparam>
/// <param name="json">JSON string</param>
/// <returns>typed object</returns>
public T Deserialize<T>(string json)
{
return serializer.Deserialize<T>(json);
}
}


using Newtonsoft.Json;
using JsonSerializer = ServiceStack.Text.JsonSerializer;

namespace JWT.Tests
{
public class ServiceStackJsonSerializer : IJsonSerializer
{
public string Serialize(object obj)
{
return JsonSerializer.SerializeToString(obj);
}

public T Deserialize<T>(string json)
{
return JsonSerializer.DeserializeFromString<T>(json);
}
}

public class NewtonJsonSerializer : IJsonSerializer
{
public string Serialize(object obj)
{
return JsonConvert.SerializeObject(obj);
}

public T Deserialize<T>(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}
}
}


/// <summary>
/// Provides JSON Serialize and Deserialize.  Allows custom serializers used.
/// </summary>
public interface IJsonSerializer
{
/// <summary>
/// Serialize an object to JSON string
/// </summary>
/// <param name="obj">object</param>
/// <returns>JSON string</returns>
string Serialize(object obj);

/// <summary>
/// Deserialize a JSON string to typed object.
/// </summary>
/// <typeparam name="T">type of object</typeparam>
/// <param name="json">JSON string</param>
/// <returns>typed object</returns>
T Deserialize<T>(string json);
}


ServiceStack.Text.JsnSerializer

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: