JSON.NET 使用技巧

原文:JSON.NET 使用技巧

1. 序列化相关技巧

忽略某些属性

有时候我们会有这样的需求,我们只需要序列化实体类中的一部分属性,这时候我们可以通过声明忽略掉一些我们不需要序列化的属性,有两种方式可以使用么达到这个目标:

首先,可以考虑使用JsonIgnore特性修饰不需要进行序列化的属性,如下所示:

public class Employee
{
	public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public decimal Salary { get; set; }
    public string Phone { get; set; }
	[JsonIgnore]
    public DateTime HireDate { get; set; }
}

运行程序:

var employeeBean = new EmployeeBean()
{
	Id = Guid.NewGuid(),
	Name = "gyzhao",
	Email = "gyzhao@gyzhao.com",
	Salary = 10000,
	Phone = "13912390987",
	HireDate = new DateTime(2012, 2, 1)
};

var jsonString = JsonConvert.SerializeObject(employeeBean, Formatting.Indented);
//输出:
//{
//  "Id": "69a406ad-902c-45d3-8ba7-89a09779ed52",
//  "Name": "gyzhao",
//  "Email": "gyzhao@gyzhao.com",
//  "Salary": 10000.0,
//  "Phone": "13912390987"
//}

如果说你需要序列化的类有很多的属性,而你是需要使用其中的一小部分,如果使用上面的上面方式就会比较繁琐(因为需要忽略的属性太多了),这时候可以考虑使用DataContract特性修饰被序列化的类,使用DataMember特性修饰需要进行序列化的属性,其他没有该特性属性会被自动忽略掉。如下所示:

[DataContract]
public class EmployeeBean
{
	[DataMember]
	public Guid Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Email { get; set; }
    [DataMember]
    public decimal Salary { get; set; }
    public string Phone { get; set; }

    public DateTime? HireDate { get; set; }
}

运行程序:

var employeeBean = new EmployeeBean()
{
	Id = Guid.NewGuid(),
	Name = "gyzhao",
	Email = "gyzhao@gyzhao.com",
	Salary = 10000,
	Phone = "13912390987",
	HireDate = new DateTime(2012, 2, 1)
};

var jsonString = JsonConvert.SerializeObject(employeeBean, Formatting.Indented);
//输出:
//{
//  "Id": "69a406ad-902c-45d3-8ba7-89a09779ed52",
//  "Name": "gyzhao",
//  "Email": "gyzhao@gyzhao.com",
//  "Salary": 10000.0
//}

DataContract特性和DataMember特性都从属于: System.Runtime.Serialization命名空间。

序列化对象时循环引用异常的解决办法

序列化一个对象时,如果该对象有一个集合属性,改集合的类型就是对象本身的话,默认序列化的方法会报一个循环引用的异常,如果需要序列化,只需声明下面的属性即可:

JsonConvert.SerializeObject(result,new JsonSerializerSettings{ReferenceLoopHandling=ReferenceLoopHandling.Serialize})

2. 反序列化相关技巧

2.1 使用匿名类型作为反序列化实体

var jsonString = @"{
                    'Id': '69a406ad-902c-45d3-8ba7-89a09779ed52',
                    'Name': 'gyzhao',
                    'Salary': 10000.0,
                    'HireDate': '2012-02-01T00:00:00'
                   }";
var employee = new
                {
                    Name = default(string),
                    Salary = default(decimal),
                    HireDate = default(DateTime),
                    Id = default(Guid)
                };
var employeeBean = JsonConvert.DeserializeAnonymousType(jsonString, employee);

3. 创建JSON

        //命令式的创建JSON对象
        var array = new JArray();
        var text = new JValue("Manual text");
        var date = new JValue(DateTime.Now);

        array.Add(text);
        array.Add(date);

        Console.WriteLine(array.ToString());

        //使用声明式的语法
        var rss =
            new JObject(
                new JProperty("channel", new JObject(
                    new JProperty("title", "James Nexton-king"),
                    new JProperty("link", "http://james.newtonking.com"),
                    new JProperty("description", "James Newton-Kin's blog."),
                    new JProperty("item", "BB"))));
        Console.WriteLine(rss.ToString());

        //通过一个匿名对象创建JSON
        JObject o = JObject.FromObject(new
        {
            channel = new
            {
                title = "James Newton-king",
                link = "http://james.netwoing.com",
                item = new List<string>()
                {
                    "A",
                    "B",
                    "C",
                    "D",
                    "E"
                }
            }
        });
        Console.WriteLine(o.ToString());

参考&进一步阅读

http://www.newtonsoft.com/json

时间: 2024-11-06 12:39:14

JSON.NET 使用技巧的相关文章

JavaScript实现url参数转成json形式_javascript技巧

朋友问的一个面试题:有个url,要求获取url 的参数,返回值为json格式. 简单的写了下,发笔记备份. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>simple a example for url to json</title> <script> var url = 'https://www.baidu.com/s?ie=u

javascript读写json示例_javascript技巧

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"

使用正则表达式的格式化与高亮显示json字符串_javascript技巧

json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示 首先是对输入进行转换,如果是对象则转化为规范的json字符串,不是对象时,先将字符串转化为对象(防止不规范的字符串),然后再次转化为json串.其中json为输入. 复制代码 代码如下: if (typeof json !== 'string') {     json = JSON.string

ASP 使用jqGrid实现读写删的代码(json)_应用技巧

jqGrid是一个优秀的基于jQuery的DataGrid框架,想必大伙儿也不陌生,网上基于ASP的资料很少,我提供一个,数据格式是json的: .一个针对jqGrid的json类:这段代码似乎是由官网论坛的一些PHP中转化而来,我们存为json.asp,代码贴一下: 复制代码 代码如下: <% response.Charset="utf-8" '--------------------------------------- ' JSONClass类 ' 将Select语句的执行

Spring mvc 接收json对象_javascript技巧

本文通过代码实例介绍spring mvc 接收json数据的方法,具体详情如下所示: 接收JSON 使用 @RequestBody 注解前台只需要向 Controller 提交一段符合格式的 JSON,Spring 会自动将其拼装成 bean. 1)在上面的项目中使用第一种方式处理返回JSON的基础上,增加如下方法: Java代码 @RequestMapping(value="/add",method=RequestMethod.POST, headers = {"conte

一个JavaScript函数把URL参数解析成Json对象_javascript技巧

问题:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象. eg:var obj=parseQueryString(url); 创建对象的三种形式: 一: var Person=new Object(); Person.name="Sun"; Person.age=24; 二: var Person=new Object(); Person["name"]="Sun"; Person[&quo

PHP中JSON的应用技巧_php技巧

互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会立即想起因RSS而兴起的XML.不可否认,XML是很不错的数据存储方式,但是其灵活恰恰造成了其解析的困难.当然,这里所指的困难,是相对于本文的主角--JSON而言. JSON为何物?我就不重复概念了.通俗的说,它是一种数据的存储格式,就像PHP序列化后的字符串一样.它是一种数据描述.比如我们将一个数组序列化后存放,就可以很容易的反序列化后应用.JSON也是如此,只不过他搭建的是客户端Javascript和服务端PHP的交互桥梁.

js读取csv文件并使用json显示出来_javascript技巧

摘要: 前面分享了用js将json数据下载为csv文件,方便后期管理.但是对于测试人员更希望能够以页面的形式展现任务,所以就做了一个将csv文件展现在页面上的例子. 代码: 复制代码 代码如下: <!DOCTYPE html> <html> <head>     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />     <ti

javascript仿php的print_r函数输出json数据_javascript技巧

复制代码 代码如下: //theOb(json数据) function print_r(theObj) { var retStr = ''; if (typeof theObj == 'object') { retStr += '<div style="font-family:Tahoma; font-size:7pt;">'; for (var p in theObj) { if (typeof theObj[p] == 'object') { retStr += '&l