.Net 下开发使用JSON

记得一本杂志上说过,“程序员可以没有空气和水,但不能没有xml和可乐”,在那个年代,xml的确非常重要的,像唯一的宠儿,现在呢,很多东西除了可以保存成xml意外有时候也选择json,甚至在设计组件时除了提供xml的数据接口,也会提供JSON的数据接口了;web程序中可以用,silverlight程序中也提供了一些基础性支出;可见JSON的重要性了。有不少学生问我在.Net中JSON到底好用不好用?其实非常好用。

在客户端,有个json2.js文件提供的parse和stringify方法可以实现客户端对json对象的解析和包装,例如:

function btn_onclick() {
            var obj = new Object();
            obj.Name = "老杨";
            obj.Title = "CIO";
            var x = JSON.stringify(obj);//json2.js文件中提供的方法
            $.post("ServerOrResource/TE.ashx", {"ob":x}, function (res) {
                var hs = "姓名:" + res.Name + " 职务:" + res.Title; //可以直接通过属性名称来进行访问。
                $("#divA").html(hs);
            }, "json");
        }

实际上,开始使用jquery后,parse方法已经很少使用了,只需要在最后指明 返回数据是 "json"即可。在服务端处理起来容易么?同样是非常容易的,在.net3.5之前,一般使用第三方组件,好像叫 Newtonsoft.Json什么的,在.net3.5 之后,可以封装一个类来进行处理,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization.Json;

/// <summary>
///JsonHelper 的摘要说明
/// </summary>
public class JsonHelper
{
    public static string SerializeObject(Object obj)
    {
        string json = "";
        DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
        {
            ser.WriteObject(ms, obj);
            json = System.Text.Encoding.UTF8.GetString(ms.ToArray());
        }
        return json;
    }
    public static T DeSerializeObject<T>(string json)
    {
        System.Text.UTF8Encoding utf = new System.Text.UTF8Encoding();        
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        using (System.IO.MemoryStream s = new System.IO.MemoryStream(utf.GetBytes(json)))
        {
            return (T)ser.ReadObject(s);           
        }
    }
}

除了涉及到泛型外,代码还是非常容易看懂的吧。

使用也非常容易,例如:

public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        string json = context.Request.Form["ob"];
        Employee emp = JsonHelper.DeSerializeObject<Employee>(json);
        string ret = JsonHelper.SerializeObject(emp);
        context.Response.Write(ret);
    }

需要注意的是 Employee是个自定义的实体类。
public class Employee
{
    string name = "";
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    string title = "";
    public string Title
    {
        get { return title; }
        set { title = value; }
    } 
}

有不少学员喜欢在实体类上加[Serializable],这时可要小心了,加上这个标记的化,JsonHelper.SerializeObject 结果中使用的是 Employee中变量名称(例如:name、title)而非属性(例如:Name、Title),JsonHelper.DeSerializeObject方法要求传递过来的json字符串也必须是变量名称格式的。当然您可以选择不用[Serializable]标记,但是有时候别的功能可能希望进行序列化,为了解决这个问题,您可以使用如下方式来定义 Employee:

[System.Runtime.Serialization.DataContract]
public class Employee
{
    string name = "";
    [System.Runtime.Serialization.DataMember]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    string title = "";
    [System.Runtime.Serialization.DataMember]
    public string Title
    {
        get { return title; }
        set { title = value; }
    } 
}

这样的化有不少好处:

客户端和服务器都可以依据 属性名称 ,轻松实现序列化和反序列化。

WCF中,这样的写法就更常见了,想了解更多可以参考WCF相关书籍。

.Net 下开发使用JSON

时间: 2024-10-08 01:34:13

.Net 下开发使用JSON的相关文章

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建 选择Linux桌面环境Deepin2014.1下开发网站的理由很简单,能截图,有搜狗输入法,可以WPS文档记录,终端下复制粘贴很容易,相比ubuntu,fedora死机次数少了,对,就是不用折腾,自带的. 先说vim和DBGp插件. Deepin2014.1简体中文,自带的vim7.4版本,很多配置已经很适合大陆的人使用了,比如Php和Python的调试支持等,不需要重新编译了.可以节省不少步骤.这里提供一个vim的配

gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets.所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用win32的)可以无缝的用在linux下,没有任何问题.是在windows下开发

使用eclipse在linux下开发C/C++

一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当痛苦. 现在推荐一个可行的方法:jre + eclipse + Xming + SecureCRT 或 Putty 1. 由于eclipse是基于java的,所以必须按照jre,可用下载:jre-8u5-linux-i586.rpm 2. 安装eclipse也很简单,直接到官网下载eclipse-c

linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol &amp;#39;[email&#160;protected]@GLIBC_2.2.5&amp;#39;

解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如以下错误: undefined reference to symbol '[email protected]@GLIBC_2.2.5'/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command li

转:Windows8内核模式下开发NDIS应用-NDIS Filter讲解

http://blog.csdn.net/itcastcpp/article/details/7752075 在Win8系统下开发驱动程序,需要数字证书,还需要驱动签名认证.不能像XP下面那样疯狂滴耍流氓了. 由于Win8系统的内核做了大幅度的修改,它和XP系统的内核起了很大的变化,最显著的就是刚才说的:需要签名和证书.  还有就是:不能随意的HOOK SSDT了. 在开发NDIS驱动程序的时候,WDK开发包提供了一个新的框架,叫着NDIS FilterNDIS Filter是一个例子工程.假入

★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import COM.Example.Main.R; import COM.Example.Main.stringG

Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 详细图文讲解

android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把环境搭建起来了,把过程记录下来分享给大家. 内容目录: 1.默认基础环境 2.NDK下载与配置 3.安装Cygwin 4.用NDK编译 5.安装CDT插件 6.安装Sequoyah插件 7.JNI编译环境配置 画了一个思维导图让大家一目了然配置过程 ---------------------------

vs下开发windows服务程序

一. VS2012下开发Windows服务 1. 打开VS2012,新建项目,选择Windows服务,此处我以开发一个定时自动发送邮件的服务来做介绍,如下图: 2. 创建好后,编译器会自动创建一些文件,其中会有一个Service1类文件,该文件是服务的关键,我们可以将其重命名,这里我将其命名为MainService,如下图: 3. 在MainService的后台代码中会自动创建一些方法,包括服务的启动和停止方法等,如下图: 4. 将服务启动时要执行的操作放在OnStart方法中,服务停止时要执行

Python在Windows下开发环境配置汇总

最近比较关注学习Python方面的资料和课程,由于Python本身基本都是在Linux下开发,本人windows用习惯了初用Linux各种别扭啊. 下面将我在配置Windows环境下的禁言写出来,与大家分享. 1.下载与安装Python 1.Python官方网址:https://www.python.org 2.点击DownLoad后选择适合自己的版本进行下载. 3.下载完成后,直接安装包安装一路Next. 4.然后配置环境变量,为计算机添加安装目录搭到环境变量,如图把python的安装目录添加