文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>转:datatable2json and model to json

转:datatable2json and model to json

时间:2010-08-31  来源:huaxiaoyao

内容整理自博客园内园友的博客

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

  把对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为对象的过程称为对象的反序列化。

在将Object序列化成JSON时普遍是使用以下几种方式:

1. 第三方组件Newtonsoft.Json.dll来序列化。

2. 直接用StringBuilder拼接字符串。

3. .NET3.5中的DataContractJsonSerializer

很多人使用的是第三方组件来序列化,但.NET3.5中已经提供了对序列化及反序列化很好的支持,直接使用就行了,而拼接字符串的方式就更原始了,要对一些字符串进行处理也容易出错。所以还是选择了DataContractJsonSerializer,感觉非常方便。下面就看怎么来实了:

首先创建项目,添加必要的程序集引用:System.ServiceModel.Web及System.Runtime.Serialization

[Serializable]

publicclass User{ public intUserId{get;set;}}

当然把[Serializable]去掉,结果就正常了,可这样实体类就不能实例化了?当然我们可以用其它方法来解决这一问题,用WCF中的数据契约声明实体就行(别忘了在所有属性上加上[DataMember]不然这些属性都不可访问哦。)[DataContract]

public class User

{

     [DataMember]

     publicint UserId{get;set;}

}

这种方式可以用来实例化model类,而不适合来处理datatable

List<User> users = new List<User>();

Users.Add( new User{UserID=1;});

string json = JsonHelper.Serialize(users);

下面有一个类可以做基本的处理:

代码
public class JsonHelper
{
public static string String2Json(string s)
{
StringBuilder sb
= new StringBuilder(s.Length + 20);

var query
= from c in s
select c;

sb.Append(
'\"');

foreach (char c in query)
{
switch (c)
{
case '\"':
sb.Append(
"\\\"");
break;
case '\\':
sb.Append(
"\\\\");
break;
case '/':
sb.Append(
"\\/");
break;
case '\b':
sb.Append(
"\\b");
break;
case '\f':
sb.Append(
"\\f");
break;
case '\n':
sb.Append(
"\\n");
break;
case '\r':
sb.Append(
"\\r");
break;
case '\t':
sb.Append(
"\\t");
break;
default:
sb.Append(c);
break;
}
}

sb.Append(
'\"');

return sb.ToString();
}

public static string Serialize<T>(T data)
{
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());
}
}

public static T Deserialize<T>(string json)
{
T obj
= Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer
= new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}


private string DataTable2Json(DataTable dt)

{
StringBuilder jsonBuilder
= new StringBuilder();
jsonBuilder.Append(
"{\"");
jsonBuilder.Append(dt.TableName);
jsonBuilder.Append(
"\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append(
"{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append(
"\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append(
"\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append(
"\",");
}
jsonBuilder.Remove(jsonBuilder.Length
- 1, 1);
jsonBuilder.Append(
"},");
}
jsonBuilder.Remove(jsonBuilder.Length
- 1, 1);
jsonBuilder.Append(
"]");
jsonBuilder.Append(
"}");
return jsonBuilder.ToString();
}

 


 

 

 


 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载