asp.net 如何转化json数据为对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 如何转化json数据为对象相关的知识,希望对你有一定的参考价值。

date:'2012-04-12',list:[uid:'11111111',amount:'1000',game_name:'龙将',uid:'2222222',amount:'2000',game_name:'火影世界']
我需要把这些充值数据 插入到数据库

参考技术A 下载这个Newtonsoft.Json,很软件就可以转换了 参考技术B 有json 反序列化的类,但是先要知道类型 参考技术C 有json 反序列化的类,但是先要知道类型 参考技术D ///<summary>
///这个方法用来初始化一个实体,将实体的数字型类型设置为-99999,字符串设置为
///null,日期类型设置为newDateTime()
///</summary>
///<typeparamname="T">需要处理的类型</typeparam>
///<paramname="entity">需要初始化的对象</param>
///<returns>返回处理完毕后的对象</returns>
publicstaticTInitialize<T>(Tentity)whereT:class

PropertyInfo[]props=entity.GetType().GetProperties();
foreach(PropertyInfopinprops)

if(p!=null)

Typet=p.PropertyType;
//不处理布尔类型
//if(!t.IsValueType&&t==typeof(bool))
//
//continue;
//if(t==typeof(int)||t==typeof(double)||t==typeof(float)||t==typeof(int?)||t==typeof(double?)||t==typeof(float?))

p.SetValue(entity,-99999,null);
if(t==typeof(decimal)||t==typeof(decimal?))

p.SetValue(entity,Convert.ToDecimal(-99999),null);

if(t==typeof(string))
p.SetValue(entity,null,null);
if(t==typeof(DateTime?)||t==typeof(DateTime))
p.SetValue(entity,newDateTime(),null);

returnentity;

///<summary>
///这个方法是根据传入的IEnumerable《T》的集合类型,
///转换为json对象集合字符串
///</summary>
///<typeparamname="T">需要转换成的类型</typeparam>
///<paramname="list">待转换的数据集合</param>
///<returns>返回json格式字符串</returns>
publicstaticstringConvertListToJson<T>(IEnumerable<T>list)whereT:new()

intstart1;
Tobj=newT();
System.Text.StringBuildersb=newStringBuilder("[");
Typetype=obj.GetType();//得到T的类型
PropertyInfo[]props;//=type.GetProperties(BindingFlags.Public|BindingFlags.Instance);
foreach(variteminlist)

//出了循环之后,需要将这个字符串的最后一个逗号去掉
sb.Append(EntityHelper.ConvertObjectToJson<T>(item));
sb.Append(",");

//整个集合处理完毕之后,需要将最后一个,去除
start1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,
sb.Append("]");
returnsb.ToString();
///<summary>
///这个方法是根据传入的IEnumerable《T》的集合类型,
///转换为EasyUIDataGridjson对象集合字符串
///对应的EasyUi版本为1.2.3
///</summary>
///<typeparamname="T">需要转换成的类型</typeparam>
///<paramname="list">待转换的数据集合</param>
///<returns>返回json格式字符串</returns>
///
[Obsolete("这个方法不建议使用,方法已过期",true)]
publicstaticstringConvertListToEasyUIDataGridJson<T>(IEnumerable<T>list,intrecordcount)whereT:new()

intstart1;
Tobj=newT();
System.Text.StringBuildersb=newStringBuilder("[");
Typetype=obj.GetType();//得到T的类型
PropertyInfo[]props;//=type.GetProperties(BindingFlags.Public|BindingFlags.Instance);
intcount=0;//计数器
foreach(Ttinlist)

count++;
props=t.GetType().GetProperties();//得到这个对象的所有属性
ColumnAttributecolumnAttr;
object[]objs;
//开始遍历这个对象的所有属性
sb.Append("");
foreach(PropertyInfopropinprops)

objs=prop.GetCustomAttributes(typeof(ColumnAttribute),false);//得到自定义特性
stringcolumnname="";//定义变量,表示json对象中某个属性名
objectvalue="";//定义变量,表示json对象中某个属性值
if(objs.Count()>0)

columnAttr=objs[0]asColumnAttribute;//得到自定义columnAttribute对象
//如果取到值了
if(columnAttr!=null)

columnname=columnAttr.Storage.Substring(1);//得到属性名
value=prop.GetValue(t,null);//获得这个属性值
if(value==null)

sb.Append("\""+columnname+"\""+":null,");

else
//if(valueisstring||valueisDateTime)
//

stringstr=value.ToString();str=str.Replace("\r\n","\\r\\n").Replace("\'","‘").Replace("\n","\\n").Replace("\r","\\r");
sb.Append("\""+columnname+"\""+":\""+str+"\",");
//
//else
//
//sb.Append(columnname+":"+value+",");
//



//出了循环之后,需要将这个字符串的最后一个逗号去掉
start1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,
sb.Append(",");

//整个集合处理完毕之后,需要将最后一个,去除
start1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,
sb.Append("]");
//returnsb.ToString();
stringhead=string.Format("0\"total\":\"1\",\"rows\":","",recordcount);
stringjson=head+sb.ToString()+"";
returnjson;

///<summary>
///将一个对象转换为json格式字符串
///</summary>
///<typeparamname="T"></typeparam>
///<paramname="target"></param>
///<returns></returns>
publicstaticstringConvertObjectToJson<T>(objecttarget)whereT:new()

Typetype=target.GetType();//得到类型varprops=target.GetType().GetProperties();//得到这个对象的所有属性
ColumnAttributecolumnAttr;
object[]objs;
//开始遍历这个对象的所有属性
System.Text.StringBuildersb=newStringBuilder("");
sb.Append("");
object[]fks;
foreach(PropertyInfopropinprops)

objs=prop.GetCustomAttributes(typeof(ColumnAttribute),false);//得到自定义特性
fks=prop.GetCustomAttributes(typeof(AssociationAttribute),true);
stringcolumnname="";//定义变量,表示json对象中某个属性名
objectvalue="";//定义变量,表示json对象中某个属性值if(fks.Count()>0)

//如果是外键的话
//这里要考虑是否有外键对象,如果是外键对象,则构造外键对象
//出于性能的考虑,只遍历第一层外键
value=prop.GetValue(target,null);
AssociationAttributefk=fks[0]asSystem.Data.Linq.Mapping.AssociationAttribute;
if(fk.IsForeignKey==true)

columnname=fk.Storage.Substring(1);//得到属性名
if(value!=null)//如果有外键对象存在,则构造外键对象

stringinnerjson=ConvertObjectToJsonNoForeignKey<T>(value);
sb.Append("\""+columnname+"\""+":"+innerjson+",");

else

sb.Append("\""+columnname+"\""+":null,");
if(objs.Count()>0)

columnAttr=objs[0]asColumnAttribute;//得到自定义columnAttribute对象
//如果取到值了
if(columnAttr!=null)

columnname=columnAttr.Storage.Substring(1);//得到属性名
value=prop.GetValue(target,null);//获得这个属性值
if(value==null)

sb.Append("\""+columnname+"\""+":null,");

else
if(valueisstring||valueisDateTime)

stringstr=value.ToString();
str=str.Replace("\r\n","\\r\\n").Replace("\'","‘").Replace("\n","\\n").Replace("\r","\\r").Replace("\"","“");
sb.Append("\""+columnname+"\""+":\""+str+"\",");

else
sb.Append("\""+columnname+"\""+":"+value+",");




//出了循环之后,需要将这个字符串的最后一个逗号去掉
intstart1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,
sb.Append("");
returnsb.ToString(); privatestaticstringConvertObjectToJsonNoForeignKey<T>(objecttarget)whereT:new()

//Typetype=target.GetType();//得到类型varprops=target.GetType().GetProperties();//得到这个对象的所有属性
ColumnAttributecolumnAttr;
object[]objs;
//开始遍历这个对象的所有属性
System.Text.StringBuildersb=newStringBuilder("");
sb.Append("");
foreach(PropertyInfopropinprops)

objs=prop.GetCustomAttributes(typeof(ColumnAttribute),false);//得到自定义特性
stringcolumnname="";//定义变量,表示json对象中某个属性名
objectvalue="";//定义变量,表示json对象中某个属性值
if(objs.Count()>0)

columnAttr=objs[0]asColumnAttribute;//得到自定义columnAttribute对象
//如果取到值了
if(columnAttr!=null)

columnname=columnAttr.Storage.Substring(1);//得到属性名
value=prop.GetValue(target,null);//获得这个属性值
if(value==null)

sb.Append("\""+columnname+"\""+":null,");

else
if(valueisstring||valueisDateTime)

stringstr=value.ToString();
str=str.Replace("\r\n","\\r\\n").Replace("\'","‘").Replace("\n","\\n").Replace("\r","\\r").Replace("\"","“");
sb.Append("\""+columnname+"\""+":\""+str+"\",");

else
sb.Append("\""+columnname+"\""+":"+value+",");




//出了循环之后,需要将这个字符串的最后一个逗号去掉
intstart1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,
sb.Append("");
returnsb.ToString();
///<summary>
///这个方法是根据传入的datatable转换为json对象字符串
///</summary>
///<paramname="dt"></param>
///<returns></returns>
publicstaticstringConvertDataTableToJSON(DataTabledt)

//return"[Id:2,LoginId:'jingjing',LoginPwd:'jingjing',Name:'JingJing',Address:'Guangzhou',Phone:'88888888',Mail:'jingjing@sina.com',UserRoleId:1,UserStateId:1,UserScore:890]";
//return"[id:1,name:'aa',id:2,name:'bb',id:3,name:'cc']";
DataColumn[]columns;
System.Text.StringBuildersb=newSystem.Text.StringBuilder("[");
foreach(DataRowrowindt.Rows)

sb.Append("");
foreach(DataColumncolindt.Columns)
if(row.IsNull(col)!=true)

if(col.DataType!=typeof(int)&&col.DataType!=typeof(double)&&col.DataType!=typeof(decimal)&&col.DataType!=typeof(float))
sb.Append("\""+col.ColumnName+"\""+":\""+row[col.ColumnName].ToString()+"\"");
else

stringstr=row[col.ColumnName].ToString();
str=str.Replace("\r\n","\\r\\n").Replace("\'","‘").Replace("\n","\\n").Replace("\r","\\r");
sb.Append("\""+col.ColumnName+"\""+":"+str);


else
sb.Append(col.ColumnName+":null");
sb.Append(",");

intstart=sb.ToString().LastIndexOf(",");
sb.Remove(start,1);//去除最后一个,
sb.Append(",");

intstart1=sb.ToString().LastIndexOf(",");
if(start1!=-1)
sb.Remove(start1,1);//去除最后一个,sb.Append("]");
returnsb.ToString();
第5个回答  2013-03-29 您好 曾经写了个 js方法就是 将json 转化为对象的 需要 给我邮箱

在ASP.NET里list怎么转化为json

ASP.NET里面怎么把从数据库查到的list<class> 转化为json,只要JS弹出来的是JSON字符串就行了,请高手们帮忙

在ASP.NET里list转化为json的方法是传递到页面上用js方法转换。
Handler.ashx中代码如下:
using System.Web.Script.Serialization;
JavaScriptSerializer jss = new JavaScriptSerializer();
//list数据
List<T> list = new List<T>();
Response.Write(jss.Serialize(list));
前台js:
$.ajax(
type: "POST",
url: "xxx/js",
data: 传递的数据 ,
success: function (result)
var data = eval("("+result+")");
//这里,你需要用循环,动态生成table,tr,td来显示result中的数据
,
complete: function (xhr, ts)
xhr = null;
,
error: function ()
alert(\'error\');

);
参考技术A 给class加上[Serializable]属性
然后可以通过JavaScriptSerializer类将List序列化成json字符串,这个类在System.Web.Script.Serialization命名空间下面,需要添加System.Web.Extensions的引用
我的.net版本是4.0追问

我是新手,麻烦写个列子,谢谢,我的也是4.0,在ASPX后台任意的方法里面写一个

追答

//假设class结构如下
[Serializable]
public class MyClass

public string Nameget;set;
public string Codeget;set;

List List = new List(); //添加元素部分省略 JavaScriptSerializer jsSer = new JavaScriptSerializer(); string jsonStr = jsSer.Serialize(obj);
这里的jsonStr就是标准格式的json字符串了
要在页面上弹出,方法有很多种,这里用其中一种好了 ClientScript.RegisterStartupScript(this.GetType(), "json", "alert('" + jsonStr +"')", true);

参考技术B public static string Obj2Json<T>(T data)

try

System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
using (MemoryStream ms = new MemoryStream())

serializer.WriteObject(ms, data);
return Encoding.UTF8.GetString(ms.ToArray());


catch

return null;

追问

json提示不存在,我不是用的MVC4,在ASPX后台方法写的

追答

工具引用中再添加 下面两个再试试
System.ServiceModel
System.ServiceModel.Web

本回答被提问者和网友采纳
参考技术C 在asp.net的webform应用中将对象序列化为json字符串的函数:
List
UserList=new
List
();
System.Web.Script.Serialization.JavaScriptSerializer
oSerializer
=
new
System.Web.Script.Serialization.JavaScriptSerializer();
string
sJSON
=
oSerializer.Serialize(new

total=10,
rows
=
showList
);
Response.Write(sJSON);
Response.End();
好像是在。net4.0中开始有这个东东的,如果想在2.0中用那还是自个儿拼字符串吧。

以上是关于asp.net 如何转化json数据为对象的主要内容,如果未能解决你的问题,请参考以下文章

传递需要的大量 Json 对象时如何改进 Asp.net Mvc 应用程序?

如何在asp.net mvc中返回复杂的Json对象

ASP.Net MVC:如何基于原始Json数据创建JsonResult

如何将 C# 属性指定给 ASP.NET MVC 中的 Json 对象?

ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?

JAVA中json字符串如何转化为map对象,获取数据?