通用Json的处理办法
1、Json的格式:
- 对象{"name": "value", "name1": "value1"}
- 对象包含对象数组{"name": "value", "name1": "value1","name3":[{"name4":"value4"},{"name5":"value5"}]}
- 对象数组[{"name": "value", "name1": "value1"},{"name2": "value2", "name3": "value3"}]
2、通用处理Json对象的C#类:DataContractJsonSerializer,命名空间:System.Runtime.Serialization.Json;
3、用一个控制台来显示,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { name = "LiLei", age = 12, skillArr = new[] { "C#", "Java" } };
Person p2 = new Person { name = "Jim", age = 13, skillArr = new[] { "ASP.NET", "Javascript" }, friends = new List<Person> { p1 } };
string p1Str = JsonHelp.strJson<Person>(p1);
string p2Str = JsonHelp.strJson<Person>(p2);
string p3Str = JsonHelp.strJson<List<Person>>(new List<Person> { p1, p2 });
Console.WriteLine(p1Str);
Console.WriteLine(p2Str);
Console.WriteLine(p3Str);
Person pObj1 = JsonHelp.Parse<Person>(p1Str);
Console.WriteLine(pObj1.GetType().ToString());
Person pObj2 = JsonHelp.Parse<Person>(p2Str);
Console.WriteLine(pObj2.GetType().ToString());
List<Person> pObj3 = JsonHelp.Parse<List<Person>>(p3Str);
Console.WriteLine(pObj3.GetType().ToString());
Console.ReadLine();
}
}
[DataContract]
internal class Person
{
[DataMember]
public string name { get; set; }
[DataMember]
public int age { get; set; }
[DataMember]
public string[] skillArr { get; set; }
[DataMember]
public List<Person> friends { get; set; }
}
internal static class JsonHelp
{
internal static T Parse<T>(string jsonStr)
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}
internal static string strJson<T>(T jsonObj)
{
using (MemoryStream ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObj.GetType()).WriteObject(ms, jsonObj);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}
通用Json的处理办法的更多相关文章
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...
- 一个.NET通用JSON解析/构建类的实现(c#)转
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
- Atitit 纯java项目的提升进度大法---通用json dsl接口
Atitit 纯java项目的提升进度大法---通用json dsl接口 1. Json dsl接口1 1.1. Url: http://aaa.com/api_jsondsl?dsl={}1 1. ...
- 一个.NET通用JSON解析/构建类的实…
一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
C#字符串数组排序 //排序只带字符的数组,不带数字的 private string[] aa ={ "a ", "c ", "b & ...
- C# Net 通用json转Object(对象)
C# Net 通用 json 转 Object 对象 C# Net 提取 json 字符串 对象 数组 C# Net json 对象 中有字符串 转为 对象 例如输入:{"1" ...
- TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法
1.一个简单的方法来修补json模块,这样序列将支持日期时间. import json import datetime json.JSONEncoder.default = lambda self, ...
- IIS6配置后仍然无法解析json文件解决办法
两台服务器,都是Windows Server2003,照着以下办法设置后,一台可以访问到json文件,一台不可以. 1. MIME设置: 在IIS的站点属性的HTTP头设置里,选MIME 映射中点击” ...
- TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法(json无法序列化对象的解决办法)
1.一个简单的方法来修补json模块,这样序列将支持日期时间. import json import datetime json.JSONEncoder.default = lambda self, ...
随机推荐
- 简写代码:当变量为false时['',false,null,undefined,0,NaN]时,返回默认值
当变量为'',false,null,undefined,0,NaN时,返回默认值 var a='' a || 'hello world' "hello world" var a ...
- Intersection of Two Linked Lists——经典问题
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- 为什么很多国内公司不使用 jQuery 等开源 JS 框架(库),而选择自己开发 JavaScript 框架?
http://www.zhihu.com/question/20099586/answer/13971670 我对公司JAVASCRIPT框架的定位思考:
- nodejs pm2使用
参考地址:http://www.jianshu.com/p/43525232b03b 参考地址:http://blog.csdn.net/leo_perfect/article/details/536 ...
- str 编码
你需要的是让编码用实际编码而不是 ascii 1 对需要 str->unicode 的代码,可以在前边写上 import sys reload(sys) sys.setdefault ...
- python的ipython manage.py shell 引发的 No module named _argparse
环境是:Centos6.6 ,python 2.6 今晚,shell 中输入: # ipython manage.py shell 报错,说找不到命令: 我当时,觉得,我有可能没有安装ipython ...
- 洛谷P3916 图的遍历 [图论,搜索]
题目传送门 图的遍历 题目描述 给出 N 个点, M条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 N,M . ...
- 洛谷P3258松鼠的新家
题目传送门 恩,很明显的一个树剖题,配合树上差分其实也并不难,不过无奈蒟蒻树剖还没那么熟练,而且树上差分也做的少,所以这题愣是做了一中午......唉,果然我还是太菜了.恩,具体做法在代码中解释吧: ...
- 编译 Windows 版本的 Unity Mono(2017-03-12 20:59)
上一篇说了如何编译 Android 下的 mono,这里简要说下编译 windows 版本的 mono,就是 mono.dll,Unity 版本只有一个 mono.dll,官方的 mono,好几个可执 ...
- Codeforces Round #407 (Div. 2) D. Weird journey(欧拉路)
D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...