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:'火影世界']
我需要把这些充值数据 插入到数据库
///这个方法用来初始化一个实体,将实体的数字型类型设置为-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);
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
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数据创建JsonResult
如何将 C# 属性指定给 ASP.NET MVC 中的 Json 对象?
ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?