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字符串转化为对象的更多相关文章

  1. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  2. JavaScript中把Json字符串转化为对象

    1.采用eval()函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串, ...

  3. C#将Json字符串转化为对象

    实体类: public class CheckData { public string msg; public string code; public string data; public stri ...

  4. JS解析json数据并将json字符串转化为数组的实现方法

    json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...

  5. JS解析json数据(如何将json字符串转化为数组)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  6. JSON字符串和Javascript对象字面量

    JSON字符串和Javascript对象字面量 JSON是基于Javascript语法的一个子集而创建的,特别是对象和数组字面量语法. 正是由于JSON的这种特殊来历,导致很多Javascript程序 ...

  7. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  8. Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  9. JSON字符串与java对象的转换

    所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...

随机推荐

  1. J Dp

    <span style="color:#000099;">/* ____________________________________________________ ...

  2. web报告工具FineReport在使用方法和解决方案常见错误遇到(一)

    FineReport在使用方法和解决方案常见错误遇到(一) 这里写的开胃菜.我希望我们能理清自己的问题和解决办法干出来的,Mark一点点.有利于所有. 失败搜索出,如果有一个文件,看看你的度娘那里.看 ...

  3. TCP/IP 网络精讲:开宗明义及第一课

    内容简介 1.课程大纲 2.第一部分第一课:互联网历史 3.第一部分第二课预告:互联网的创立,OSI七层模型 课程大纲 我们将带大家一起来学习很多网络方面的技能,向大家介绍TCP/IP的基础知识点.你 ...

  4. Akka.NET是Java/Scala 流行框架Akka的一个 .NET 开源移植

    Akka.NET v1.0 已发布,支持Mono Akka.NET 是Java/Scala 流行框架Akka的一个 .NET 开源移植.可用于构建高并发,分布式和容错事件驱动的应用在 .NET 和 M ...

  5. 如何在 Swift 中优雅地处理 JSON

    阅读目录 在Swift中使用JSON的问题 开始 基础用法 枚举(Enumeration) 下标(Subscripts) 打印 调试与错误处理 后记   因为Swift对于类型有非常严格的控制,它在处 ...

  6. POJ 3177 Redundant Paths - from lanshui_Yang

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  7. C利用宏语言(#,##,do…while(0)盛大)

    C利用宏语言(#,##.do-while(0)盛大) 1.使用宏预先定义__FILE__,__FUNCTION__.__LINE__. #include <stdio.h> void fu ...

  8. [原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)

    原文:[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) 前言:上一篇文章讲述了一些实现DAL的理论,本 ...

  9. JAVA 跑马灯文字效果

    JAVA跑马灯文字效果的实现: 1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下: package com.example.horseracelig ...

  10. Top与ROW_NUMBER

    论Top与ROW_NUMBER读取第一页的效率问题   前一段时间研究关于分页的问题,由于数据库属于百万级的,考虑了关于优化方面的问题.其中一个考虑是:第一页展现的频率肯定是最高的,所以我想第一页就使 ...