/// <summary>
/// Json工具类
/// </summary>
public class JsonUtility
{
private static JsonUtility _instance = new JsonUtility(); /// <summary>
/// 单例
/// </summary>
public static JsonUtility Instance
{
get { return _instance; }
set { _instance = value; }
} /// <summary>
/// Json转对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public T JsonToObject<T>(string json)
{
var ser = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
var jsonObject = (T)ser.ReadObject(ms);
ms.Close();
return jsonObject;
} /// <summary>
/// Json转对象列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public IList<T> JsonToObjectList<T>(string json)
{
json = json.Replace("}]}", "");
var startIndex = json.IndexOf(":[{") + 3;
var newJson = json.Substring(startIndex);
var regex = new Regex("},{");
var jsons = regex.Split(newJson); if (newJson.Contains("\":[]}"))
{
throw new Exception("快件单号没有找到");
}
var list = new List<T>(); foreach (var item in jsons)
{
var temp = "{" + item + "}";
list.Add(JsonToObject<T>(temp));
}
return list;
} /// <summary>
/// 对象转Json
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string ObjectToJson(object obj)
{
var serializer = new DataContractJsonSerializer(obj.GetType());
using (var ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
var sb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
} /// <summary>
/// 对象列表转Json
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objectList"></param>
/// <returns></returns>
public string ObjectListToJson<T>(IList<T> objectList)
{
return ObjectListToJson(objectList, "");
} /// <summary>
/// 对象列表转Json
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objectList"></param>
/// <param name="className"></param>
/// <returns></returns>
public string ObjectListToJson<T>(IList<T> objectList, string className)
{
var sbResult = new StringBuilder();
sbResult.Append("{");
className = string.IsNullOrEmpty(className) ? objectList[0].GetType().Name : className;
sbResult.Append("\"" + className + "\":["); for (var i = 0; i < objectList.Count; i++)
{
var item = objectList[i];
if (i > 0)
{
sbResult.Append(",");
}
sbResult.Append(ObjectToJson(item));
} sbResult.Append("]}");
return sbResult.ToString();
}
}

编程题:1. var person = '{name:"Lily",sex:"famale",age:24,country:"US"}';将person转换成JSON对象并便利每个属性值。的更多相关文章

  1. java编程如何实现多条2017-01-16 22:28:11.0这样的时间数据,转换成Date类型Mon Jan 16 22:28:11 CST 2017这样的时间数据

    不多说,直接上干货! package zhouls.bigdata.DataFeatureSelection.sim; import java.text.ParseException; import ...

  2. JS编程题

    1.计算给定数组 arr 中所有元素的总和 (数组中的元素均为 Number 类型) function sum(arr) { var sum=0; for (var i=arr.length-1; i ...

  3. 汤姆大叔的6道javascript编程题题解

    看汤姆大叔的博文,其中有篇(猛戳这里)的最后有6道编程题,于是我也试试,大家都可以先试试. 1.找出数字数组中最大的元素(使用Math.max函数) var a = [1, 2, 3, 6, 5, 4 ...

  4. 去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码

    编程题很简单.整个试卷结构为: 一.问答题: 对前端的理解,了解哪些框架库? 二.在线编程题:身份证分组 如下第一道:身份证分组 三.在线编程题:身份证分组.统计字符.酒店价格(三选二) 如下第二三四 ...

  5. JavaScript数组基础编程题归纳

    之前的随笔"JavaScript中数组类型的属性和方法"中有介绍很多数组类型的方法,但都是一些理论.最近在练习在线编程题,发现自己还是习惯于用常规的循环来答题,对于数组的方法的使用 ...

  6. JS编程题练习

    JS编程题练习 1. 两个数组合并成一个数组排序返回 先依次比较两个数组,按照小的就传入新的数组.当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可. function ...

  7. JavaScript编程题(含腾讯2016校招题)

    作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几 ...

  8. FCC编程题之中级算法篇(下)

    介绍 本篇是"FCC编程题之中级算法篇"系列的最后一篇 这期完结后,下期开始写高级算法,每篇一题 目录 1. Smallest Common Multiple 2. Finders ...

  9. 头条编程题 万万没想到之抓捕孔连顺 JavaScript

    [编程题] 万万没想到之抓捕孔连顺 时间限制:1秒 空间限制:131072K 我叫王大锤,是一名特工.我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺.和我一起行动的还有另外两名特工,我提议 ...

随机推荐

  1. hdu4407Sum(容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4407 Sum Time Limit: 2000/1000 MS (Java/Others)     Memory ...

  2. tiny4412学习笔记-将uboot、zImage、文件系统烧到emmc中 (转)

    http://blog.chinaunix.net/uid-30025978-id-4788683.html 1.首先还是要将u-boot写入SD卡中从SD卡启动. 使用读卡器将SD插入电脑中,使用u ...

  3. python_正则_re模块

    正则表达式元字符: 字符匹配 : . :除换行符以外的任意单个字符 [] :指定范围内字符 [^] :指定范围外字符 次数匹配: * :任意次,0,1,多次 .* :任意字符 任意次 ? :至多1次或 ...

  4. 一个python爬虫协程的写法(gevent模块)

    from bs4 import BeautifulSoup import requests import gevent from gevent import monkey, pool monkey.p ...

  5. Codeforces Round #321 (Div. 2)-A. Kefa and First Steps,暴力水过~~

    A. Kefa and First Steps time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. HDU1423 最长公共上升子序列LCIS

    Problem Description This is a problem from ZOJ 2432.To make it easyer,you just need output the lengt ...

  7. 【枚举】Southwestern Europe Regional Contest H - Sheldon Numbers

    https://vjudge.net/contest/174235#problem/H [题意] 求[x,y]之间有多少个Sheldon Number Sheldon Number是二进制满足以下条件 ...

  8. 安卓巴士Android开发神贴整理

    10个经典的Android开源应用项目 http://www.apkbus.com/android-13519-1-1.html 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发 ...

  9. POJ 1741 Tree【树分治】

    第一次接触树分治,看了论文又照挑战上抄的代码,也就理解到这个层次了.. 以后做题中再慢慢体会学习. 题目链接: http://poj.org/problem?id=1741 题意: 给定树和树边的权重 ...

  10. Anagrams(hash表)

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...