C# 中使用JSON

摘要:
在C#中使用JSON不需要使用第三方库。使用System.Runtime.Serialization。Json随附。NETFramwork3.5完成JSON解析。有关JSON的介绍,请参见主页上的图:http://www.json.org/1、使用需要添加引用:System.ServiceModel。Web和System.Runtime。序列化,然后使用

C#中使用JSON不需要使用第三方库,使用.NET Framwork3.5自带的System.Runtime.Serialization.Json即可很好的完成JSON的解析。

关于JSON的入门介绍见(首页的图很形象):

http://www.json.org/ 

一、Using

需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using:

using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;

 二、定义序列化的类

假如我们要转化的JSON字符串格式为:

复制代码
{
    
"encoding":"UTF-8",
    
"plug-ins":["python","c++","ruby"],
    
"indent":{
        
"length":3,
        
"use_space":true
    }
}
复制代码

然后编写相应的序列化的类,注意下面类加的Attribute:

C# 中使用JSON第3张[DataContract(Namespace = "http://coderzh.cnblogs.com")]
class Config
{
    [DataMember(Order 
= 0)]
    
public string encoding { getset; }
    [DataMember(Order 
= 1)]
    
public string[] plugins { getset; }
    [DataMember(Order 
= 2)]
    
public Indent indent { getset; }
}

[DataContract(Namespace 
= "http://coderzh.cnblogs.com")]
class Indent
{
    [DataMember(Order 
= 0)]
    
public int length { getset; }
    [DataMember(Order 
= 1)]
    
public bool use_space { getset; }
}

三、对象转化为JSON字符串

使用WriteObject方法:

C# 中使用JSON第3张
var config = new Config(){
                         encoding 
= "UTF-8",
                         plugins 
= new string[]{"python""C++""C#"},
                         indent 
= new Indent(){ length = 4, use_space = false}
                         };
var serializer 
= new DataContractJsonSerializer(typeof(Config));
var stream 
= new MemoryStream();
serializer.WriteObject(stream, config);

byte[] dataBytes = new byte[stream.Length];

stream.Position 
= 0;

stream.Read(dataBytes, 
0, (int)stream.Length);

string dataString = Encoding.UTF8.GetString(dataBytes);

Console.WriteLine(
"JSON string is:");
Console.WriteLine(dataString);

四、JSON字符串转对象

使用ReadObject方法: 

C# 中使用JSON第3张
var mStream = new MemoryStream(Encoding.Default.GetBytes(dataString));
Config readConfig 
= (Config)serializer.ReadObject(mStream);

Console.WriteLine(
"Encoding is: {0}", readConfig.encoding);
foreach (string plugin in readConfig.plugins)
{
    Console.WriteLine(
"plugins is: {0}", plugin);
}
Console.WriteLine(
"indent.length is: {0}", readConfig.indent.length);
Console.WriteLine(
"indent.use_space is: {0}", readConfig.indent.use_space);

 五、输出结果:

复制代码
JSON string is:
{
"encoding":"UTF-8","plugins":["python","C++","C#"],"indent":{"length":4,"use_space":false}}
Encoding 
is: UTF-8
plugins 
is: python
plugins 
is: C++
plugins 
is: C#
indent.length 
is4
indent.use_space 
is: False
复制代码

免责声明:文章转载自《C# 中使用JSON》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QTA-qtaf自动化测试实践Edge Extraction (subpixel Precise)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理。但是,这个工具列表可能会改变您编写C#代码的方式。 C#编程的最佳工具有以下几类: IDE VS扩展 编译器、编辑器和序列化 反编译和代码转换工具 构建自动化和合并工具 版本控制...

C#环境搭建,以及C#编译器的使用

搭建nuget包管理器 HomePage windows环境下,可以下载安装包:Download 使用最新版本的C#编译器 C# 5.0之后,微软将csc开源并独立运行,其项目命名为——roslyn Get the C# compiler before v5.0 C# 5.0 之前的版本,编译器csc集成在 .Net Framework 中,一般在以下目录...

CLS(公共语言规范)的CLSCompliant(跨语言调用)

.net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:用C#写的一个类,编译到dll中,然后在VB.net中调用: using System;namespace CLSsample{ public class CLSTest {  public CLSTest()  {     }  public void AB...

Windows App开发之开发准备

操作系统及SDK 操作系统 显而易见,想要开发Windows App就得在Windows 8/8.1/10上进行,老旧的Windows XP/Vista/7已经不能满足时代的需要了。当然,在Windows App的发展过程中,其本身也有着较大的变动,为了使用新的特性,建议使用Windows 10。我在写这个教程时,Windows 10正式版并未面世,因此...

C#编程(四)

原文地址:http://blog.csdn.net/shanyongxu/article/details/46400067 C#预定义数据类型 C#中的可用类型以及及其定义非常严格,C#中获得数据类型分为两种,第一种是值类型,第二种是引用类型.区别是值类型直接存储值,引用类型存储值的引用.值类型存储在堆栈中,引用类型存储在托管堆中.要能区分值类型还是引用类...

C#调用C++dll,传指针释放内存问题

一、传入dll前,在C#中申请内存空间 c#里面的指针即 IntPtr 申请如下: IntPtr SrcImgData = Marshal.AllocHGlobal(length);  这种需要提前知道空间大小,否则无法确定空间大小,会导致dll内部处理时越界报错。 c#里面申请空间了,那么c++里面一般就是在这些空间里面操作了,一般不会重新分配内存,那么...