JSON.NET 简单的使用

JSON.NET(http://json.codeplex.com/)使用来将.NET中的对象转换为JSON字符串(序列化?),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?)

首先为了例子随便定义一个类型:

复制代码
public class Product
{
    public string Name { get; set; }
    public DateTime Expiry { get; set; }
    public decimal Price { get; set; }
    public string[] Sizes { get; set; }

    public override string ToString()
    {
        return string.Format("Name:{0},Expiry:{1},Price:{2},SizesCount:{3}"
            , Name, Expiry, Price, Sizes.Length);
    }
}
复制代码

初始化对象:

复制代码
public static void Main(string[] passwordargs)
{
    Product product = new Product()
    {
        Name = "android",
        Expiry = DateTime.Now,
        Price = 2000,
        Sizes = new string[] { "1.5", "2.2", "4.1" }
    };
}
复制代码

进行到JSON的转换:

Console.WriteLine(JsonConvert.SerializeObject(product));

输出结果:

{"Name":"android","Expiry":"2013-08-30T09:50:11.5147845+08:00","Price":2000.0,"Sizes":["1.5","2.2","4.1"]}

其它看起来一切正常,除了这个日期有点怪

格式化日期:

//设置日期时间的格式,与DataTime类型的ToString格式相同
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";

Console.WriteLine(JsonConvert.SerializeObject(product, iso));

输出结果:

{"Name":"android","Expiry":"2013-08-30 09:53:58","Price":2000.0,"Sizes":["1.5","2.2","4.1"]}

从JSON到对象的转换:

string str = "{\"Name\":\"android\",\"Expiry\":\"2013-08-30 09:53:58\",\"Price\":2000.0,\"Sizes\":[\"1.5\",\"2.2\",\"4.1\"]}";

Product p = (Product)JsonConvert.DeserializeObject(str, typeof(Product));

Console.WriteLine(p.ToString());

输出结果:

Name:android,Expiry:2013/8/30 9:53:58,Price:2000.0,SizesCount:3

从JSON到键值对的转换:

复制代码
string strJson = @"{""Name1"": ""小明"",""Name2"": ""小花"",""Name3"": ""小红""}";

Dictionary<string, string> _dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(strJson);

foreach (KeyValuePair<string, string> kp in _dictionary)
{
    Console.WriteLine(kp.Key + ":" + kp.Value);
}
复制代码

输出结果:

Name1:小明 
Name2:小花 
Name3:小红

从字符串转换到JSON对象,以及JSON对象的简单使用:

复制代码
string strJson2 = @"{ ""student"": { ""Name1"": ""小明"" , ""Name2"": ""小花"" , ""Name3"": ""小红""} }";

JObject jsonObj = JObject.Parse(strJson2);

Console.WriteLine(jsonObj["student"]["Name1"].ToString());
Console.WriteLine(jsonObj["student"]["Name2"].ToString());
Console.WriteLine(jsonObj["student"]["Name3"].ToString());
复制代码

输出结果:

小明 
小花 
小红

直接生成JSON对象:

复制代码
JObject json =
    new JObject(
    new JProperty("Channel",
        new JObject(
        new JProperty("title", "JSON"),
        new JProperty("link", "JSON.NET"),
        new JProperty("description", "JSON.NET Description"),
        new JProperty("items",
            new JArray(
            new JObject(new JProperty("haha1", "123")),
            new JObject(new JProperty("haha2", "456")),
            new JObject(new JProperty("haha3", "789"))
                )))));

Console.WriteLine(json.ToString());
复制代码

输出结果:


  "Channel": { 
    "title": "JSON", 
    "link": "JSON.NET", 
    "description": "JSON.NET Description", 
    "items": [ 
      { 
        "haha1": "123" 
      }, 
      { 
        "haha2": "456" 
      }, 
      { 
        "haha3": "789" 
      } 
    ] 
  } 
}

 

附上我的实验代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;

namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//解析json字符串
//String str = "{\"h\":\"hello world!\"}";
//JObject obj = JObject.Parse(str);
//Response.Write(obj["h"].ToString());

//Product product = new Product()
//{
// Name = "android",
// Expiry = DateTime.Now,
// Price = 2000,
// Sizes = new string[] { "1.5", "2.2", "4.1" }
//};

//格式化日期
//IsoDateTimeConverter iso = new IsoDateTimeConverter();
//iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";

//将对象转换为json格式
//Response.Write(JsonConvert.SerializeObject(product,iso));

//解析匿名对象
//var obj = new
//{
// Name = "android",
// Expiry = DateTime.Now,
// Price = 2000,
// Sizes = new string[] { "1.5", "2.2", "4.1" }
//};

//格式化日期
//IsoDateTimeConverter iso = new IsoDateTimeConverter();
//iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
//Response.Write(JsonConvert.SerializeObject(obj,iso));


//将List转换为json格式
//List<Product> list = new List<Product>() {
// product,product,product,product,product
//};
//格式化日期
//IsoDateTimeConverter iso2 = new IsoDateTimeConverter();
//iso2.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
//Response.Write(JsonConvert.SerializeObject(list,iso2));
//Response.End();

//将DataTable转换为json格式
//DataTable dt = new DataTable();
//dt.Columns.Add("id", typeof(int));
//dt.Columns.Add("name", typeof(string));
//dt.Columns.Add("regtime", typeof(string));
//dt.Rows.Add(new object[] { 1, "张三", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") });
//dt.Rows.Add(new object[] { 2, "李四", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") });

//Response.Write(JsonConvert.SerializeObject(dt));
//Response.End();


//从json到对象转换
//string str = "{\"Name\":\"android\",\"Expiry\":\"2013-08-30 09:53:58\",\"Price\":2000.0,\"Sizes\":[\"1.5\",\"2.2\",\"4.1\"]}";
//Product pro = (Product)JsonConvert.DeserializeObject(str, typeof(Product));
//Product pro = JsonConvert.DeserializeObject<Product>(str);
//Response.Write(pro.ToString());

//匿名对象中包含列表对象等
//var obj = new { productList = list, strHTML = "Welcome!" };
//IsoDateTimeConverter iso3 = new IsoDateTimeConverter();
//iso3.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
//Response.Write(JsonConvert.SerializeObject(obj, iso3));
//Response.End();

 

//Json数组
JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));

//Json对象
JObject o = new JObject();
//设置Json键的名字为MyArray,值为array
o["MyArray"] = array;
//调用ToString方法得到json字符串
string json = o.ToString();
Response.Write(json);
Response.End();
// {
// "MyArray": [
// "Manual text",
// "2000-05-23T00:00:00"
// ]
// }
}

}

public class Product
{
public string Name { get; set; }
public DateTime Expiry { get; set; }
public decimal Price { get; set; }
public string[] Sizes { get; set; }

public override string ToString()
{
return string.Format("Name:{0},Expiry:{1},Price:{2},SizesCount:{3}"
, Name, Expiry.ToString("yyyy-MM-dd HH:mm:ss.fff"), Price, Sizes.Length);
}
}

}

posted @ 2015-03-17 15:54  唔愛吃蘋果  阅读(473)  评论(0编辑  收藏  举报