c# json 生成xml文件 谢谢 谢谢诶 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先转换成datatablepublic static DataTable Json2DataTable(string strJson) { var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase); string strName = rg.Match(strJson).Value; DataTable tb = null; strJson = strJson.Substring(strJson.IndexOf("[") + 1); strJson = strJson.Substring(0, strJson.IndexOf("]")); rg = new Regex(@"(?<={)[^}]+(?=})"); MatchCollection mc = rg.Matches(strJson); for (int i = 0; i < mc.Count; i++) { string strRow = mc[i].Value; string[] strRows = strRow.Split(','); if (tb == null) { tb = new DataTable(); tb.TableName = strName; foreach (string str in strRows) { var dc = new DataColumn(); string[] strCell = str.Split(':'); dc.ColumnName = strCell[0]; tb.Columns.Add(dc); } tb.AcceptChanges(); } DataRow dr = tb.NewRow(); for (int r = 0; r < strRows.Length; r++) { dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", ""); } tb.Rows.Add(dr); tb.AcceptChanges(); } return tb; }然后DataSet ds = new DataSet(); DataTable dt1 = new DataTable(); ds.Tables.Add(dt1); ds.WriteXml(你想生成的xml的地址); 要现有序列化类才好和json,xml互相转换。没有这个类,恐怕要手工转,而且json没有数组的名字,xml有,需要随机定义这2着并非完全等价啊。 这里有人用js实现了一个http://topic.csdn.net/u/20090209/10/48ff17a6-2f79-4cea-a9a4-7cf09d89d640.html 先把JSON反序列化成对象,再把对象序列化成XML DataTable生成的xml难道不是太复杂、太垃圾么?!一个json对象就是一个Dictionary<string,jsonObject>,而jsonObject其实只有简单的这几种可能性: 1. 数值。 2. 字符串。 3. json数组。 4. 另外一个json对象。 5. null。其实生成的xml是非常清爽的,例如使用 linq to xml 来生成。 反序列化时,如果一个属性是数组,那么属性名自然是有的,而json数组并不需要名字。 对于一个对象(或者对象数组),json并不为其命名。这其实一点也不影响反序列化,json反而可以适合作为一种赋值机制。例如你可以把A类型对象进行json,然后反序列成为一个B类型对象,尽管所谓的最终对象的类型名字变了,也不影响反序列化,更不需要“随机定义”。这方面当然json当然比xml强。 如何把网页保存成word文档(asp.net) 短信猫怎么用 请大侠速速帮忙!怎样同时向多张关联的表中插入数据 GridView的超链接列怎么把参数传给别的页面? 在有几百万条数据表里使用SQL COUNT 函数计算太慢怎么解决. Labelname没有声明 怎么样移动透明的Form窗体 |M| VS2005中的GridView控件如何给分页那里添加“当前第N页 共有N页 N条记录” 如何在数据库操作发生错误 的情况下,将对ACCESS数据库的操作进行回滚回复? 注册成功后能自动生成一个文件夹,求助! 询问一条sql语句怎么写 加急加急,现在有ASP,NET问题,求高手帮满解决
public static DataTable Json2DataTable(string strJson)
{
var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
string strName = rg.Match(strJson).Value;
DataTable tb = null;
strJson = strJson.Substring(strJson.IndexOf("[") + 1);
strJson = strJson.Substring(0, strJson.IndexOf("]"));
rg = new Regex(@"(?<={)[^}]+(?=})");
MatchCollection mc = rg.Matches(strJson);
for (int i = 0; i < mc.Count; i++)
{
string strRow = mc[i].Value;
string[] strRows = strRow.Split(',');
if (tb == null)
{
tb = new DataTable();
tb.TableName = strName;
foreach (string str in strRows)
{
var dc = new DataColumn();
string[] strCell = str.Split(':');
dc.ColumnName = strCell[0];
tb.Columns.Add(dc);
}
tb.AcceptChanges();
}
DataRow dr = tb.NewRow();
for (int r = 0; r < strRows.Length; r++)
{
dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
}
tb.Rows.Add(dr);
tb.AcceptChanges();
}
return tb;
}然后DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
ds.Tables.Add(dt1);
ds.WriteXml(你想生成的xml的地址);
没有这个类,恐怕要手工转,而且json没有数组的名字,xml有,需要随机定义这2着并非完全等价啊。
DataTable生成的xml难道不是太复杂、太垃圾么?!
一个json对象就是一个Dictionary<string,jsonObject>,而jsonObject其实只有简单的这几种可能性:
1. 数值。
2. 字符串。
3. json数组。
4. 另外一个json对象。
5. null。其实生成的xml是非常清爽的,例如使用 linq to xml 来生成。
反序列化时,如果一个属性是数组,那么属性名自然是有的,而json数组并不需要名字。