JsonHelper修改4.0
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的更多相关文章
- 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 ...
- 修改mongodb3.0副本集用户密码遇到的坑
最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...
- dedecms如何修改共0页/0条记录为英文版?
近日,在测试一个网站功能的时候,发现在搜索结果的下面为中文的“共0页/0条记录”,但客户的网站为英文版,所以我们需要将搜索的结果信息也要显示为英文,好了,我们开始动手修改dedecms的文件,以达到我 ...
- (转)通过注册表修改VC6.0的字体
出处:http://www.cnblogs.com/PocketZ 在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的 ...
- 特定条件下批量解压文件改变编码,顺便修改.so.0找不到等一些小问题
直接结论: 1.linux解压文件乱码: unzip -O GBK *.zip 2.linux改变文件内容编码: 安装enca,下载地址:https://github.com/nijel/enca/i ...
- Fast Flux技术——本质就是跳板,控制多个机器,同一域名指向极多的IP(TTL修改为0),以逃避追踪
转自:http://ytuwlg.iteye.com/blog/355718 通过病毒邮件和欺诈网站学到的对付网络封锁的好东西:Fast Flux技术 收到一封邮件,引起我的好奇了: 邮件标题是:Ha ...
- MVC4.0 JSON JsonResult 序列化之后 对JSON 进行修改 EXTJS4.0 分页
事情是这样的:我在MVC 下 前后台交互 用JsonResult 返回给前台使用. public JsonResult AjaxFindHospitalInfo() { List<T> l ...
- 如何修改yii2.0用户登录使用的user表为其它的表
这只是自己练习的一个记录而已. 因为某种原因,不想用yii自带的user表,想用自己建的admin数据库表,修改如下: 1. 参考高级模板里里的common\models\User 修改 Admi ...
- 18.Yii2.0框架模型修改记录 和 修改点击量
目录 修改数据 修改点击量 修改数据 上面要 use app\models\Article; //修改 //http://yii.com/?r=home/Edit public function ac ...
随机推荐
- soa文章摘抄
from: http://blog.vsharing.com/fengjicheng/MC19136/ 浅析深究什么是SOA? (入选推荐日志,加10币)浅析深究什么是SOA? 金蝶中间件有限公司总经 ...
- Python 字符串前面加'r'
在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '\' . 例如,\n 在raw string中,是两个字符,\和n ...
- 使用swig将C/C++代码转为JAVA接口(Windows平台)
小弟一直没用过Linux. 平时的码也只是在WINDOW上用SWIG或CYGWIN进行编译. 下面的例子,先从网上找来一个.c文件. example.c /* File : example.c */ ...
- 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
www.gbtags.com 使用javascript开发的视差滚动效果的云彩 阅读全文:使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
- USD Series: Installation
Today I would like to talk is Unified Service Desktop. It was published in Dynamics CRM 2013 Spring ...
- oracle中database links的使用
1.在pl/sql developer中创建database links 2.使用database links select * from table1@xtbg 注意:@xtbg是database ...
- linux下tar.gz、tar、bz2、zip、 xz、rar等解压缩、压缩命令小结
http://www.jb51.net/LINUXjishu/43356.html unrar x aa.rarunrar e aa.rarx参数 是解压到一个文件夹里 e参数是把所有文件解压到当前目 ...
- RDLC 动态列
很久没有写博客了,关于动态列,国内很少资料有介绍动态列的,所想写点心得给哥们 啥是动态列呢?通常我们用存储过程时有列转行和行转列的做法,那么在RDLC 怎么支持呢?其实很简单,就是利用了RDLC的 C ...
- Unity骨骼动力学应用
原地址:http://blog.csdn.net/libeifs/article/details/7169794 开发环境 Window7 Unity3D 3.4.1 MB525defy Andro ...
- setup factory 打包VB 工程
setup factory 使用起来很简单你可以如下:1.你把你刚编译出来的exe和相关的资源文件复制到某一空目录下.把exe文件添加到setup factory里之后,在列表里右键,属性里面可以设置 ...