C# 中类对象与JSON字符串互相转换的几种方法
随着 Rest 风格 API 的应用越来越广泛,对象与JSON字符串互相转换的功能也用的越来越多。这里介绍三种方法,期中两种为DotNet Framework .NET 3.5 及后续版本自带的 DataContractJsonSerializer、 JavaScriptSerializer,另一种为 Newtonsoft.Json.dll ,我选择它的原因是因为它支持 DotNet Framework .NET 2.0。
方法一、DoNet2.0 需要借助于Newtonsoft.Json.dll
我使用的版本是:Version 10.0.3
// 从一个对象信息生成Json串
public static string ObjectToJson(object obj)
{
return JsonConvert.SerializeObject(obj);
}
// 从一个Json串生成对象信息
public static object JsonToObject(string jsonString, object obj)
{
return JsonConvert.DeserializeObject(jsonString, obj.GetType());
}
方法二、DataContractJsonSerializer
/// <summary>
/// Json转换成对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonText"></param>
/// <returns></returns>
public static T JsonToObject<T>(string jsonText)
{
// Framework 2.0 不支持
DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
T obj = (T)s.ReadObject(ms);
ms.Dispose();
return obj;
}
/// <summary>
/// 对象转换成JSON
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string ObjectToJSON<T>(T obj)
{
// Framework 2.0 不支持
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
string result = string.Empty;
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
ms.Position = 0;
using (StreamReader read = new StreamReader(ms))
{
result = read.ReadToEnd();
}
}
return result;
}
namespace SL_DataContractJsonSerializer
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}
//This uses an event handler, not SL data binding
void OnClick(object sender, EventArgs args)
{
txtOutput1.Text = "Create a User object and serialize it.";
string json = WriteFromObject();
txtOutput2.Text = json.ToString(); // Displays: {"Age":42,"Name":"Bob"}
txtOutput3.Text = "Deserialize the data to a User object.";
string jsonString = "{'Name':'Bill', 'Age':53}";
User deserializedUser = ReadToObject(jsonString);
txtOutput4.Text = deserializedUser.Name; // Displays: Bill
txtOutput5.Text = deserializedUser.Age.ToString(); // Displays: 53
}
// Create a User object and serialize it to a JSON stream.
public static string WriteFromObject()
{
//Create User object.
User user = new User("Bob", 42);
//Create a stream to serialize the object to.
MemoryStream ms = new MemoryStream();
// Serializer the User object to the stream.
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
ser.WriteObject(ms, user);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, 0, json.Length);
}
// Deserialize a JSON stream to a User object.
public static User ReadToObject(string json)
{
User deserializedUser = new User();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as User;
ms.Close();
return deserializedUser;
}
}
[DataContract]
public class User
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
public User() { }
public User(string newName, int newAge)
{
Name = newName;
Age = newAge;
}
}
}
方法三、JavaScriptSerializer
public static void JsonMy(string json)
{
JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类
ToJsonMy list = js.Deserialize<ToJsonMy>(json); //将json数据转化为对象类型并赋值给list
string result = list.result;
string res_info = list.res_info;
string queryorder_info = list.res_info;
}
public static void JsonMy4(string json)
{
JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类
ToJsonMy3 list = js.Deserialize<ToJsonMy3>(json); //将json数据转化为对象类型并赋值给list
string result = list.result;
string res_info = list.res_info;
string order_num = list.queryorder_info.order_num;
List<orderdetail> orderdetail = list.queryorder_info.orderdetail;
string CFTUin = orderdetail[0].CFTUin;
string HotelName = orderdetail[0].HotelName;
string ListID = orderdetail[1].ListID;
string State = orderdetail[2].State;
}
C# 中类对象与JSON字符串互相转换的几种方法相关推荐
- C# 对象与JSON字符串互相转换的三种方式
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下 ...
- javascript对象和json字符串之间转换的问题
在开发中,当使用ajax向后端发送请求返回一个json时,有两个可能,一种是返回json字符串,一种是返回object. javascript中有两个方法可以用来处理两者之间的互相转换问题: JSON ...
- json对象和json字符串的转换
var data= {"name":"小明","pwd":123456};//这是一个json的对象 json的字符串 既然是字符串就是用引 ...
- vue——json对象和json字符串的转换
一.JSON格式 在JSON中,字符串必须用双引号包裹.JSON由若干key:value的格式的数据组成.其中key值必须为字符串,value可以为字符串.数字.对象.数组.布尔型.null.但val ...
- alibaba 实体转json_JAVA中使用alibaba fastjson实现JSONObject、Object、Json字符串的转换...
Object转JSON字符串: String jsonStr = JSONObject.toJSONString(object); JSON字符串转JSONObject: JSONObject jso ...
- java 嵌套对象转xml_Gson对Java嵌套对象和JSON字符串之间的转换 | 学步园
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...
- 【Groovy】json 序列化 ( 类对象转为 json 字符串 | 使用 JsonBuilder 进行转换 | 使用 JsonOutput 进行转换 | 将 json 字符串格式化输出 )
文章目录 一.Groovy 对象转为 json 字符串 ( 使用 JsonBuilder 进行转换 ) 二.使用 JsonOutput 将指定类型对象转为 json 字符串 三.将 json 字符串格 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
最新文章
- 谷歌发布人体图像分割工具BodyPix 2.0,支持多人识别,可在iPhone上流畅运行
- javascript中not defined、undefined、null以及NaN的区别
- socket同步和异步通信区别_程序员必知必会,同步通信与异步通信,你了解多少...
- .Android开发在Eclipse环境中无法显示提示信息This element neither has attached
- Jetty+json-lib库抛异常的问题解决过程(java.lang.NoClassDefFoundError: net/sf/json/JSONObject)...
- python socket udp并发_Python进阶----UDP协议使用socket通信,socketserver模块实现并发
- 取代Swagger + Postman ,Apifox 功能更强大!
- c语言银行家算法模拟程序,银行家算法C语言模拟程序
- Script To Monitor RDBMS Session UGA and PGA Current And Maximum Usage Over Time
- Docker入门学习四之自己制作Docker镜像
- opengl 加载贴图Unknown DIB file format问题
- Android--使用融云SDK开发即时聊天(一)----基本环境搭建
- 抠图算法(交互式)以及证件照的自动抠图
- Fiddler+夜神模拟器+xposed+justTrustMe手机抖音抓包
- 如何让app不走系统代理?
- [转载]Delta Lake、Iceberg 和 Hudi 三大开源数据湖不知道如何选?那是因为你没看这篇文章
- ubuntu安装搜狗输入法老是没中文怎么办
- AFD在CentOS环境中部署
- AcWing 188. 武士风度的牛 BFS 水题
- 基于java实现bilibili视频爬虫
热门文章
- python随机生成字母和数字的混合字符串_用python生成数字、字母和特殊字符混合的字符串...
- HTML5网页APP连接MQTT,使用js连接mqtt
- vscode新建html中文乱码,vscode中html中文乱码 怎么办
- vb net excel 剪贴板 粘贴_12-2-Excel快速编辑行列的10条经验
- python怎样打开加密的文件_如何用Python 加密文件
- 安卓如何调出软键盘_智能汽车到底如何交互?小鹏用全场景语音给出了答案
- iphone7防水_什么是IP68防尘防水,您的手机是IP68级别手机,进水也不给保修
- 我的10年富士康故事
- 自己动手写CPU(4)移动操作指令的实现
- 实现verilog设计控制交通灯