多层次的Json字符串转化为对象
using Arvato.CRM.DataTrans.ConsoleHost.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace Arvato.CRM.DataTrans.ConsoleHost.Helper
{
public static class JsonHelper
{
#region Json字符串转换成对象
/// <summary>
/// 根据公司需求实现的Json反序列化方法
/// </summary>
/// <typeparam name="T">泛型实例</typeparam>
/// <param name="JsonStr">Json串</param>
/// <returns>MainJson<T>对象</returns>
public static MainJson<T> JSONToList<T>(this string JsonStr)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
Serializer.MaxJsonLength = 52428800;//默认接受最大的长度是 2097152/1024/1024=2MB
MainJson<T> objs = Serializer.Deserialize<MainJson<T>>(JsonStr);
return objs;
}
public static List<T> JSONStringToList<T>(this string JsonStr)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
Serializer.MaxJsonLength = 52428800;
List<T> objs = Serializer.Deserialize<List<T>>(JsonStr);
return objs;
}
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
//System.ServiceModel.Web 和 System.Runtime.Serialization
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
#endregion
}
}
如下是一个三层次的Json字符串的转换对象实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Arvato.CRM.DataTrans.ConsoleHost.Model
{
/// <summary>
/// Json接口
/// </summary>
public class MainJson<T>
{
/// <summary>
/// 1:成功 0:失败
/// </summary>
public int success { get; set; }
/// <summary>
/// 描述
/// </summary>
public string message { get; set; }
/// <summary>
/// 数据主体
/// </summary>
public body<T> body { get; set; }
}
/// <summary>
/// 数据主体
/// </summary>
/// <typeparam name="T"></typeparam>
public class body<T>
{
/// <summary>
/// 实体
/// </summary>
public List<T> item { get; set; }
/// <summary>
/// 表示总记录数
/// </summary>
public int total { get; set; }
}
/// <summary>
/// 城市列表
/// </summary>
public class CITY
{
/// <summary>
/// 城市编码
/// </summary>
public int? cityid { get; set; }
/// <summary>
/// 城市名称
/// </summary>
public object name { get; set; }
/// <summary>
/// 最后更新时间戳
/// </summary>
public DateTime? utime { get; set; }
}
}
调用时:
MainJson<CITY> city_List = JsonHelper.JSONToList<CITY>(JsonStr);
再如2个层次的Json字符串转换对象时:
namespace CrazyAuchan.Common
{
public class MainJson<T>
{
public int total { get; set; }
public string message { get; set; }
public int pageNo { get; set; }
public int pageSize { get; set; }
public int status { get; set; }
////0:新注册获得 1:消费获得 2:分享成功获得
public int source { get; set; }
public List<T> data { get; set; }
}
public class CouponInfo
{
public string activityNo { get; set; }
public string couponNo { get; set; }
//Failure(0L, "已失效"), NoFailure(1L, "未失效")
//0:已失效 1:未失效
public int overdueStatus { get; set; }
//HasShare(0L, "已分享"), DoesNotShare(1L, "未分享");
//0:已分享 1:未分享
public int shareStatus { get; set; }
////ANewRegistrationToObtain(0L, "新注册获得"), ConsumerToObtain(1L, "消费获得"), ShareSuccess(2L, "分享成功获得");
////0:新注册获得 1:消费获得 2:分享成功获得
public int source { get; set; }
//couponNo的HTML二维码
public string couponCode { get; set; }
//总条数
public int itemCount { get; set; }
}
}
调用时的代码:
var CouponList1 = new List<CouponInfo>();
var
CouponJson = "{\"data\":
[
{\"activityNo\":\"1111\",\"couponNo\":\"7200002000095\",\"overdueStatus\":1,\"shareStatus\":0},{\"activityNo\":\"1111\",\"couponNo\":\"7200000200094\",\"overdueStatus\":1,\"shareStatus\":1},
{\"activityNo\":\"1111\",\"couponNo\":\"7200002000093\",\"overdueStatus\":0,\"shareStatus\":0},{\"activityNo\":\"1111\",\"couponNo\":\"7200000200092\",\"overdueStatus\":1,\"shareStatus\":0},
{\"activityNo\":\"1111\",\"couponNo\":\"7200000200091\",\"overdueStatus\":1,\"shareStatus\":0},{\"activityNo\":\"1111\",\"couponNo\":\"7200000200090\",\"overdueStatus\":1,\"shareStatus\":1}
],
\"total\":16,
\"message\":\"符合申领资格!\",
\"pageNo\":1,
\"pageSize\":6,
\"status\":1,
\"source\":1
}";
if (!string.IsNullOrEmpty(CouponJson))
{
MainJson<CouponInfo> MainCouponInfo = JsonHelper.JSONToList<CouponInfo>(CouponJson);
if (MainCouponInfo.status == 1)
{
itemCount = MainCouponInfo.total;
CouponList1 = MainCouponInfo.data.Where(p => !string.IsNullOrEmpty(p.couponNo) && p.couponNo.Length == 13).ToList();
}
}
foreach (var coupon in CouponList1)
{
if (coupon != null && !string.IsNullOrEmpty(coupon.couponNo))
{
coupon.itemCount = itemCount;
coupon.couponCode = BarCodeHelper.getBarCode13(coupon.couponNo, 2, 40);//"7200000000090"
}
}
var json = JsonHelper.JsonSerialize(CouponList1);
多层次的Json字符串转化为对象的更多相关文章
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- JavaScript中把Json字符串转化为对象
1.采用eval()函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串, ...
- C#将Json字符串转化为对象
实体类: public class CheckData { public string msg; public string code; public string data; public stri ...
- JS解析json数据并将json字符串转化为数组的实现方法
json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...
- JS解析json数据(如何将json字符串转化为数组)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- JSON字符串和Javascript对象字面量
JSON字符串和Javascript对象字面量 JSON是基于Javascript语法的一个子集而创建的,特别是对象和数组字面量语法. 正是由于JSON的这种特殊来历,导致很多Javascript程序 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
随机推荐
- Sonar安装与使用说明
我总结的Sonar安装与使用说明,需要的可以去网盘下载. 网盘地址: http://pan.baidu.com/s/199BII
- 【Linux探索之旅】第一部分第二课:下载Linux,免费的噢
内容简介 1.第一部分第二课:下载Linux,免费的噢 2.第一部分第三课预告:测试并安装Ubuntu 下载Linux,免费的噢 大家好,上一课我们认识了非常“霸气侧漏”的Linux操作系统. 也知道 ...
- Directx11学习笔记【四】 封装一个简单的Dx11DemoBase
根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBas ...
- .NET读写Excel工具Spire.Xls使用(1)入门介绍
原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...
- UML 简单的总结
上某一个地方,总有个记忆挥不散,每一个深夜某一个地方,总有着最深的思量- 都说岁月无情人有情,记忆easy催人老,可有时候反倒觉着人比岁月更无情.岁月留下了我们成长的印记,但是有时候以前认为会相伴永远 ...
- HDU 5052 LCT
Yaoge's maximum profit Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- 【剑指offer】面试题28:弦乐
def Permutation(data, i): if len( data ) == 0: return # i stand for the start of first part for i in ...
- 1!到n!的和
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 23 Solved: 14 [Submit][Status][Web Board] Descriptio ...
- lua基金会【五岁以下儿童】I/O文件操作
--[[ lua操作相关文件I/O ]]-- --件,假设该文件不存在的话, --lua会帮助我们在你规定的文件夹下创建这个文件,前提是该文件夹要存在 --[[ 同一时候我们应该掌握写入文件的模式: ...
- MVC下判断用户登录和授权状态方法
MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...