public class JsonHelper
{
/// <summary>
/// 将对象序列化为JSON格式
/// </summary>
/// <param name="o">对象</param>
/// <returns>json字符串</returns>
public static string SerializeObject(object o)
{
string json = JsonConvert.SerializeObject(o);
return json;
} /// <summary>
/// 解析JSON字符串生成对象实体
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
/// <returns>对象实体</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
} /// <summary>
/// 解析JSON数组生成对象实体集合
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
/// <returns>对象实体集合</returns>
public static List<T> DeserializeJsonToList<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
List<T> list = o as List<T>;
return list;
} /// <summary>
/// 反序列化JSON到给定的匿名对象.
/// </summary>
/// <typeparam name="T">匿名对象类型</typeparam>
/// <param name="json">json字符串</param>
/// <param name="anonymousTypeObject">匿名对象</param>
/// <returns>匿名对象</returns>
public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
} /// <summary>
/// 将JSON解析成DataSet(只限标准的JSON数据)
/// 例如:Json={t1:[{name:'数据name',type:'数据type'}]} 或 Json={t1:[{name:'数据name',type:'数据type'}],t2:[{id:'数据id',gx:'数据gx',val:'数据val'}]}
/// </summary>
/// <param name="json">Json字符串</param>
/// <returns>DataSet</returns>
public static DataSet S_JsonToDataSet(string json)
{
try
{
var ds = new DataSet();
var jss = new JsonSerializer();
StringReader sr = new StringReader(json); object obj = jss.Deserialize(sr, typeof(Dictionary<string, object>));
var datajson = (Dictionary<string, object>)obj;
foreach (var item in datajson)
{
var dt = new DataTable(item.Key);
var rows = (object[])item.Value;
foreach (object row in rows)
{
var val = (Dictionary<string, object>)row;
DataRow dr = dt.NewRow();
foreach (var sss in val)
{
if (!dt.Columns.Contains(sss.Key))
{
dt.Columns.Add(sss.Key);
dr[sss.Key] = sss.Value;
}
else
dr[sss.Key] = sss.Value;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
return ds;
}
catch
{
return null;
}
} /// <summary>
/// 将DataSet转化成JSON数据
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static string S_DataSetToJson(DataSet ds)
{
string json;
try
{
if (ds.Tables.Count == )
throw new Exception("DataSet中Tables为0");
json = "{";
for (int i = ; i < ds.Tables.Count; i++)
{
json += "T" + (i + ) + ":[";
for (int j = ; j < ds.Tables[i].Rows.Count; j++)
{
json += "{";
for (int k = ; k < ds.Tables[i].Columns.Count; k++)
{
json += ds.Tables[i].Columns[k].ColumnName + ":'" + ds.Tables[i].Rows[j][k] + "'";
if (k != ds.Tables[i].Columns.Count - )
json += ",";
}
json += "}";
if (j != ds.Tables[i].Rows.Count - )
json += ",";
}
json += "]";
if (i != ds.Tables.Count - )
json += ",";
}
json += "}";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return json;
} /// <summary>
/// json字符串转换为Xml对象
/// </summary>
/// <param name="sJson"></param>
/// <returns></returns>
public static XmlDocument S_JsonToXml(string sJson)
{
var jss = new JsonSerializer();
StringReader sr = new StringReader(sJson);
object obj = jss.Deserialize(sr, typeof(Dictionary<string, object>)); var dic = (Dictionary<string, object>)obj; var doc = new XmlDocument();
XmlDeclaration xmlDec = doc.CreateXmlDeclaration("1.0", "gb2312", "yes");
doc.InsertBefore(xmlDec, doc.DocumentElement);
XmlElement root = doc.CreateElement("root");
doc.AppendChild(root);
foreach (var item in dic)
{
XmlElement element = doc.CreateElement(item.Key);
S_KeyValue2Xml(element, item);
root.AppendChild(element);
}
return doc;
} public static void WriteXML(string sJson,string filename)
{
var jss = new JsonSerializer();
StringReader sr = new StringReader(sJson);
object obj = jss.Deserialize(sr, typeof(Dictionary<string, object>)); var dic = (Dictionary<string, object>)obj; var doc = new XmlDocument();
XmlDeclaration xmlDec = doc.CreateXmlDeclaration("1.0", "gb2312", "yes");
doc.InsertBefore(xmlDec, doc.DocumentElement);
XmlElement root = doc.CreateElement("root");
doc.AppendChild(root);
foreach (var item in dic)
{
XmlElement element = doc.CreateElement(item.Key);
S_KeyValue2Xml(element, item);
root.AppendChild(element);
}
doc.Save("XML/" + filename);
}
private static void S_KeyValue2Xml(XmlElement node, KeyValuePair<string, object> source)
{
object kValue = source.Value;
if (kValue.GetType() == typeof(Dictionary<string, object>))
{
var dictionary = kValue as Dictionary<string, object>;
if (dictionary != null)
foreach (var item in dictionary)
{
if (node.OwnerDocument != null)
{
XmlElement element = node.OwnerDocument.CreateElement(item.Key);
S_KeyValue2Xml(element, item);
node.AppendChild(element);
}
}
}
else if (kValue.GetType() == typeof(object[]))
{
var o = kValue as object[];
if (o != null)
foreach (object t in o)
{
if (node.OwnerDocument != null)
{
XmlElement xitem = node.OwnerDocument.CreateElement("Item");
var item = new KeyValuePair<string, object>("Item", t);
S_KeyValue2Xml(xitem, item);
node.AppendChild(xitem);
}
}
}
else
{
if (node.OwnerDocument != null)
{
XmlText text = node.OwnerDocument.CreateTextNode(kValue.ToString());
node.AppendChild(text);
}
}
}
}

JsonHelper修改4.0的更多相关文章

  1. Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    1. 安装mysql但是从来没启动过,今天一启动就报错: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2 ...

  2. 修改mongodb3.0副本集用户密码遇到的坑

    最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...

  3. dedecms如何修改共0页/0条记录为英文版?

    近日,在测试一个网站功能的时候,发现在搜索结果的下面为中文的“共0页/0条记录”,但客户的网站为英文版,所以我们需要将搜索的结果信息也要显示为英文,好了,我们开始动手修改dedecms的文件,以达到我 ...

  4. (转)通过注册表修改VC6.0的字体

    出处:http://www.cnblogs.com/PocketZ 在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的 ...

  5. 特定条件下批量解压文件改变编码,顺便修改.so.0找不到等一些小问题

    直接结论: 1.linux解压文件乱码: unzip -O GBK *.zip 2.linux改变文件内容编码: 安装enca,下载地址:https://github.com/nijel/enca/i ...

  6. Fast Flux技术——本质就是跳板,控制多个机器,同一域名指向极多的IP(TTL修改为0),以逃避追踪

    转自:http://ytuwlg.iteye.com/blog/355718 通过病毒邮件和欺诈网站学到的对付网络封锁的好东西:Fast Flux技术 收到一封邮件,引起我的好奇了: 邮件标题是:Ha ...

  7. MVC4.0 JSON JsonResult 序列化之后 对JSON 进行修改 EXTJS4.0 分页

    事情是这样的:我在MVC 下 前后台交互 用JsonResult 返回给前台使用. public JsonResult AjaxFindHospitalInfo() { List<T> l ...

  8. 如何修改yii2.0用户登录使用的user表为其它的表

      这只是自己练习的一个记录而已. 因为某种原因,不想用yii自带的user表,想用自己建的admin数据库表,修改如下: 1. 参考高级模板里里的common\models\User 修改 Admi ...

  9. 18.Yii2.0框架模型修改记录 和 修改点击量

    目录 修改数据 修改点击量 修改数据 上面要 use app\models\Article; //修改 //http://yii.com/?r=home/Edit public function ac ...

随机推荐

  1. macOS VMWare Fusion报错”找不到可以连接的有效对等进程”的解决方案

    macOS VMWare Fusion报错”找不到可以连接的有效对等进程”的解决方案 我的是macOS 10,默认情况下不允许未知身份的软件安装 默认情况,如下图所示: 解决办法: sudo spct ...

  2. Hive QL——深入浅出学Hive

    第一部分:DDL DDL •建表 •删除表 •修改表结构 •创建/删除视图 •创建数据库 •显示命令 建表 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_ ...

  3. linux查找超过一定时间的文件,并批量删除

    1.find . -maxdepth 4  -name "*-*" -mtime 3 -maxdepth的值决定是否对下面的子目录进行递归查找 -mtime 3表示查找刚好3天的: ...

  4. IIS服务器支持.apk文件下载

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  5. Android4.2.2 Gallery2源码分析(2)——发现Gallery.java

    上文中,main.xml是我直接提出来的,并没有说明是怎么找到它的,现在说明发现它的理由: 一般我们分析界面布局会用到hierarchyviewer这个工具,从工具中,我们对应到视图,最主要的视图id ...

  6. JS实现的MAP结构数据

    Array.prototype.remove = function(s) { for (var i = 0; i < this.length; i++) { if (s == this[i]) ...

  7. 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式

    上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...

  8. windows 7 64bit安装apche php

    http://windows.php.net/download#php-5.6-ts-VC11-x64http://www.apachehaus.com/cgi-bin/download.plx 下载 ...

  9. 关于listview,scrollview显示模糊边缘的设置

    朋友们有时可能在开发中遇到这样的莫名其妙的问题,listview或scrollview滑动时上边和下边会出现两条模糊的边缘,有时会影响到我们app的视觉效果,我们怎么去掉这两条模糊的边缘呢?很简单,一 ...

  10. 解决Linux平台下VMware出现"No 3d support is available from the host"或"Hardware graphics acceleration is not available" 错误

    错误日志: No 3d support is available from the host Hardware graphics acceleration is not available 解决方法: ...