• 转:datatable2json and model to json


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

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

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

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

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

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

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

    3. .NET3.5中的DataContractJsonSerializer

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

    首先创建项目,添加必要的程序集引用:System.ServiceModel.WebSystem.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();
         }

     


     

  • 相关阅读:
    Android-PullToRefresh 下拉刷新增加setOnItemLongClickListener
    【453】周志华-机器学习-读书笔记
    【452】pandas筛选出表中满足另一个表所有条件的数据
    【451】python 同一行打印进度条
    【449】Win10 蓝牙耳机链接没有声音
    HBase(一)HBase入门简介
    kafka可视化客户端工具(Kafka Tool)的基本使用
    Kafka(五)Kafka的API操作和拦截器
    Kafka(四)Kafka在zookeeper中的存储
    Kafka(三)Kafka的高可用与生产消费过程解析
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/1813986.html
Copyright © 2020-2023  润新知