JSON 序列化与弱类型
一、C#中JSON序列化有多种方式:
使用“DataContractJsonSerializer ”类时需要,
1、引用程序集 System.Runtime.Serialization 和 System.ServiceModel.Web
2、导入命名空间 System.Runtime.Serialization 和 System.Runtime.Serialization.Json
使用“JavaScriptSerializer ”类时需要,
1、引用程序集 System.Web.Extension
2、导入命名空间 System.Web.Script.Serialization
使用“JsonSerializer” 类时需要,
1、添加Newtonsoft.Json.dll文件引用
2、导入命名空间Newtonsoft.Json 和 Newtonsoft.Json.Linq。
3、其中的JsonSerializerSettings 类提供了多种情况选择。
二、弱类型 JSON 序列化
假设下面的JSON字符串:
{"personal": {"name": "Paul", "age": 23, "height": 1.7, "isSingle": true, "luckyNumbers": [5,17,21]}, "favoriteBands": ["Band ABC", "Band XYZ"]}
若要反序列化该对象,需指定[DataMember] 属性,如下类型所示:
[DataContract]
public class MemberProfile
{
[DataMember]
public PersonalInfo personal; [DataMember]
public string[] favoriteBands;
} [DataContract]
public class PersonalInfo
{
[DataMember]
public string name; [DataMember]
public int age; [DataMember]
public double height; [DataMember]
public bool isSingle; [DataMember]
public int[] luckyNumbers;
}
三、上一个JsonHelper,供参考:
/// <summary>
/// Json序列化和反序列化辅助类
/// </summary>
public class JsonHelper
{
/// <summary>
/// Json序列化
/// </summary>
public static string JsonSerializer<T>(T obj)
{
string jsonString=string.Empty;
try
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
jsonString = Encoding.UTF8.GetString(ms.ToArray());
}
}
catch
{
jsonString=string.Empty;
}
return jsonString;
} /// <summary>
/// Json反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
T obj = Activator.CreateInstance<T>();
try
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());//typeof(T)
T jsonObject = (T)ser.ReadObject(ms);
ms.Close(); return jsonObject;
}
}
catch
{
return default(T);
}
} // 将 DataTable 序列化成 json 字符串
public static string DataTableToJson(DataTable dt)
{
if (dt == null || dt.Rows.Count == )
{
return "\"\"";
}
JavaScriptSerializer myJson = new JavaScriptSerializer(); List<Dictionary<string, object>> list = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows)
{
Dictionary<string, object> result = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
result.Add(dc.ColumnName, dr[dc].ToString());
}
list.Add(result);
}
return myJson.Serialize(list);
} // 将对象序列化成 json 字符串
public static string ObjectToJson(object obj)
{
if (obj == null)
{
return string.Empty;
}
JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.Serialize(obj);
} // 将 json 字符串反序列化成对象
public static object JsonToObject(string json)
{
if (string.IsNullOrEmpty(json))
{
return null;
}
JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.DeserializeObject(json);
} // 将 json 字符串反序列化成对象
public static T JsonToObject<T>(string json)
{
if (string.IsNullOrEmpty(json))
{
return default(T);
}
JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.Deserialize<T>(json);
}
}
JSON 序列化与弱类型的更多相关文章
- 解决nodejs中json序列化时Date类型默认为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...
- 解决nodejs中json序列化时Date类型为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2 $ node ...
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
- JSON序列化那点事儿
JSON序列化那点事儿 序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScri ...
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
- 自定义JsonResult处理JSON序列化DateTime类型数据(Ext4.2+ASP.NET MVC 4)
最近项目中前台页面使用Extjs4.2 ,在后台ASP.NET MVC4返回的DateTime类型的数据错返回的DateTime类型的JsonResult的结果中的值是“\/Date(13784461 ...
- .net core json序列化 long类型转化成字符串
实现类 using System; using System.ComponentModel; using System.Linq; using Newtonsoft.Json; namespace H ...
- json序列化时定制支持datetime类型,和到中文让他保留中文形式
json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型 自定义时间序列化转换器 import json from json import JSONEncoder from dat ...
- Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化
Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化 一般原因为 序列化的对象 ...
随机推荐
- Python -- 函数之推导式
5.12 推导式 l = [] for i in range(1,11): l.append(i) print(l) # 用列表推导式 (一行搞定) l = [i for i in range(1,1 ...
- javaweb基础(7)_HttpServletResponse原理详解
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- JQuery EasyUI学习记录(二)
1.jquery easyUI动态添加选项卡(查看jquery easyUI手册) 1.1 用于动态添加一个选项卡 1.1.1 选中指定的选项卡和判断某个选项卡是否存在 测试代码: <a id= ...
- 科学计算库Numpy——概述
Numpy主要用于数组的各种计算. 导入Numpy import numpy as np 数组类型 Numpy的数组类型为numpy.ndarray. array=np.array([1,2,3,4, ...
- Python基础——异常
捕捉所有异常 for i in range(10): try: input_number=input('write a number') if input_number=='q': break res ...
- python爬虫基础09-selenium大全3/8-Remote Webdriver
Selenium笔记(3)Remote Webdriver 本文集链接:https://www.jianshu.com/nb/25338984 简介 selenium.webdriver.remote ...
- 创建Django项目并将其部署在腾讯云上
这段时间在做scrapy爬虫,对爬出来的数据基于Django做了统计与可视化,本想部署在腾讯云上玩玩,但是因为以前没有经验遇到了一些问题,在这里记录一下: 首先说下Django的创建与配置: 1. 创 ...
- SQL登录注册练习
/class User package com.neusoft.bean; public class User { private int password; private String name; ...
- LeetCode(201) Bitwise AND of Numbers Range
题目 Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numb ...
- selenium2 页面对象模型Page Object
开发Selenium WebDriver测试时,可以使用页面对象模型,这样可使得测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.同时页面对象模型也提供了一个注释,帮助缓存远程,避免出现元素 ...