EasyUIDataGrid 的List<T>转Json

本文介绍了一种将自定义实体列表转换为EasyUI DataGrid所需JSON格式的方法,通过使用.NET的JavaScriptSerializer进行序列化,并针对时间格式进行了特殊处理,确保了数据的正确性和时间的本地化显示。
EasyUI的DataGrid的Json自己拼接的话非常麻烦,而且容易出错,于是写了个通用的方法!
CustomList<T>自定义类,继承于List<T>,用来处理返回的实体的总记录数和实体集合,其中属性 RecordAmout为总记录统计
JavaScriptSerializer .Net 4.0 提供的json转换方法
JavaScriptSerializer转换时间格式 "\/Date(1356019200000)\/" 默认转换为UTC格式,这样我们就需要一个小小的转换(利用正则)
sJSON = System.Text.RegularExpressions.Regex.Replace(sJSON, @"\\/Date\((\d+)\)\\/", match =>
            {
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
                dt = dt.ToLocalTime();
                return dt.ToString(dateTimeFormatString);
            });
 
/// <summary>
        /// CustomList转为EasyUI的DataGrid的Json格式
        /// </summary>
        /// <param name="cList"></param>
        /// <returns></returns>
        public static string CustomList2EasyUIDataGridJson<T>(CustomList<T> cList, string dateTimeFormatString = "yyyy-MM-dd HH:mm:ss")
        {
            System.Text.StringBuilder jsonBuilder = new System.Text.StringBuilder();
            jsonBuilder.Append("{");
            jsonBuilder.AppendFormat("\"total\":{0}, ", cList.RecordAmout);
            jsonBuilder.Append("\"rows\": ");
            JavaScriptSerializer oSerializer = new JavaScriptSerializer();
            string sJSON = oSerializer.Serialize(cList);
            sJSON = System.Text.RegularExpressions.Regex.Replace(sJSON, @"\\/Date\((\d+)\)\\/", match =>
            {
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
                dt = dt.ToLocalTime();
                return dt.ToString(dateTimeFormatString);
            });

            jsonBuilder.Append(sJSON);
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            jsonBuilder.Append("]");
            jsonBuilder.Append("}");
            return jsonBuilder.ToString();
        }

  

转载请标注http://www.cnblogs.com/xushaonian/p/3246254.html

鞋子http://xiaobenxie.taobao.com

杯子http://988777.taobao.com

转载于:https://www.cnblogs.com/xushaonian/p/3246254.html

在C#开发中,将泛型列表(`List<T>`)换为JSON格式是一项常见任务,通常用于数据持久化、API交互或配置保存等场景。以下是几种常见的实现方法,主要使用了流行的 `Newtonsoft.Json`(也称为 Json.NET)库,以及 .NET 框架内置的 `System.Runtime.Serialization.Json` 库。 ### 使用 Newtonsoft.Json 进行序列化 `Newtonsoft.Json` 是一个功能强大且广泛使用的第三方 JSON 框架,支持复杂的类型换和自定义序列化行为。 #### 示例代码: ```csharp using System; using System.Collections.Generic; using Newtonsoft.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 } }; string json = JsonConvert.SerializeObject(people, Formatting.Indented); Console.WriteLine(json); } } ``` 上述代码将一个 `List<Person>` 对象序列化为格式良好的 JSON 字符串。该方法支持自定义类型、嵌套对象以及泛型集合[^1]。 ### 使用内置的 DataContractJsonSerializer 如果你希望避免使用第三方库,可以使用 .NET 框架自带的 `DataContractJsonSerializer` 类。 #### 示例代码: ```csharp using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Json; using System.Text; [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } } class Program { static void Main() { List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 } }; DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Person>)); using (MemoryStream stream = new MemoryStream()) { serializer.WriteObject(stream, people); string json = Encoding.UTF8.GetString(stream.ToArray()); Console.WriteLine(json); } } } ``` 此方法要求类标记为 `[DataContract]`,其属性标记为 `[DataMember]`,以确保正确序列化[^3]。 ### 序列化注意事项 - **自定义类型**:无论是使用 `Newtonsoft.Json` 还是 `DataContractJsonSerializer`,都需要确保泛型列表中的类型具有可序列化的结构。 - **性能**:在处理大型数据集时,`Newtonsoft.Json` 通常提供更好的性能和灵活性。 - **格式控制**:`Newtonsoft.Json` 提供了丰富的选项,如格式化输出、忽略空值、处理循环引用等。 ### 反序列化 JSON 到 List<T> 同样,将 JSON 字符串反序列化回 `List<T>` 也非常简单。例如: ```csharp string json = "[{\"Name\":\"Alice\",\"Age\":30},{\"Name\":\"Bob\",\"Age\":25}]"; List<Person> people = JsonConvert.DeserializeObject<List<Person>>(json); ``` 这种方法适用于从 Web API 获取数据或从文件加载配置等场景[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值