rhy*_*yno 14 .net wcf serialization json json.net
当我将WCF配置为使用jSON序列化并在我的一个DataContracts中包含DataTable时,它会在将整个DataContract序列化为jSON之前将DataTable序列化为XML.我希望将DataTable序列化为jSON,而不是XML.
我的问题是:
Kei*_*ows 13
DataTable是纯.NET构造,不能由JSON以无损方式(轻松)表示.DataTables包含许多JSON无法存储的附加信息:主键,autoincs,允许空值,标题,数据类型,索引等.序列化为XML/Binary是.NET本机序列化DataTable的唯一方法.然后将此XML序列化DataTable序列化为JSON.
使用JSON.NET或FastJSON将DataTable转换为简单,干净的JSON兼容版本的DataTable,可以由任何JSON客户端使用,而不仅仅是.NET WCF客户端.您将丢失上面(1)中提到的所有DataTable自定义属性,并且只获取字段名称/值JSON对.由于每行中的字段名称重复,以这种方式存储是低效的.
不要在DataContract中使用DataTable.如果您希望获得DataTable的好处并且您的客户端始终是.NET,则通过二进制序列化将DataTable序列化为字节数组,然后可选地压缩生成的序列化字节流.在DataContract中显示一个字节数组.这将在客户端为您提供高效,完全无损的DataTable版本(在解压缩和二进制反序列化之后),而不是DataTable的淡化JSON版本(由(2)提供)...
试试这个:
public string ConvertDataTabletoString(System.Data.DataTable dt)
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (System.Data.DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (System.Data.DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30164 次 |
| 最近记录: |