C# JSON

C#处理json文件主要有两种方式:

  (1)使用JavaScriptSerializer类,需要引入System.Web.Extension库,并添加下面两个引用:

  using System.Web;
  using System.Web.Script.Serialization;

  主要代码如下所示:

[csharp]  view plain  copy
  1. public class Data  
  2.   {  
  3.       public int Id { getset; }  
  4.       // [ScriptIgnore]  
  5.       public string Name { getset; }  
  6.   
  7.       public string GetName()  
  8.       {  
  9.           return Id.ToString() + Name;  
  10.       }  
  11.   }  
  12.   
  13.   public class JsonPaserWeb  
  14.   {  
  15.       // Object->Json  
  16.       public string Serialize(Data obj)  
  17.       {  
  18.           JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();  
  19.           string json = jsonSerializer.Serialize(obj);  
  20.           return json;  
  21.       }  
  22.   
  23.       // Json->Object  
  24.       public Data Deserialize(string json)  
  25.       {  
  26.           JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();  
  27.           //执行反序列化  
  28.           Data obj = jsonSerializer.Deserialize<Data>(json);  
  29.           return obj;  
  30.       }  
  31.   }  


  可以使用[ScriptIgnore]标记来让某个变量不参与序列化。

  (2)使用DataContractJsonSerializer类,需要引入System.Runtime.Serialization库,并加入如下引用:

  using System.Runtime.Serialization;
  using System.Runtime.Serialization.Json;

  示例代码如下所示:

[csharp]  view plain  copy
  1. [DataContract]  
  2.    public class Data  
  3.    {  
  4.        [DataMember(Name = "id", Order = 0)]  
  5.        public int Id;  
  6.   
  7.        [DataMember(Name = "name", Order = 1)]  
  8.        public string Name;  
  9.   
  10.        [DataMember(Name = "child", Order = 2)]  
  11.        public Child child = new Child();  
  12.   
  13.        [DataMember(Name = "list", Order = 3)]  
  14.        public List<int> Ids = new List<int>();  
  15.   
  16.        [DataMember(Name = "dictionary", Order = 4)]  
  17.        public Dictionary<int, Child> dic = new Dictionary<int, Child>();  
  18.   
  19.        [IgnoreDataMember]  
  20.        public string Description = "This is a json data class";  
  21.   
  22.    }  
  23.   
  24.    public class Child  
  25.    {  
  26.        public float Age;  
  27.        public string FullName;  
  28.    }  
  29.   
  30.    class JsonParserRuntime  
  31.    {  
  32.        // Object->Json  
  33.        public string Serialize(Data obj)  
  34.        {  
  35.            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());  
  36.            string json = "";  
  37.            using (MemoryStream stream = new MemoryStream())  
  38.            {  
  39.                jsonSerializer.WriteObject(stream, obj);  
  40.                json = Encoding.UTF8.GetString(stream.ToArray());  
  41.            }  
  42.            return json;  
  43.        }  
  44.   
  45.        // Json->Object  
  46.        public Data Deserialize(string json)  
  47.        {  
  48.            Data obj = null;  
  49.            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))  
  50.            {  
  51.                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Data));  
  52.                obj = (Data)jsonSerializer.ReadObject(ms);  
  53.            }  
  54.            return obj;  
  55.        }  
  56.    }  

  使用[DataContract]标记的类,可以同时使用[DataMember(Name = "id", Order = 0)]标记来处理变量,也可以使用[IgnoreDataMember]标记来让某个变量不参与序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,将JSON数据转换为DataTable是一个常见的任务,特别是在需要从Web服务接收JSON响应并将其呈现到本地数据操作场景时。以下是实现这一过程的一种典型步骤: ### 步骤一:安装必要的库 首先,确保您已经在项目中安装了.NET Framework 的 `System.Data` 和 `Newtonsoft.Json` 库,后者用于解析JSON。 ```bash // 使用NuGet包管理器添加新版本的Newtonsoft.Json Install-Package Newtonsoft.Json -Version 13.0.1 ``` ### 步骤二:加载JSON字符串至对象 使用`JsonConvert.DeserializeObject<T>()`方法可以将JSON字符串转换为指定类型的对象(例如字典或自定义类)。对于更复杂的数据结构,可能需要创建辅助类来匹配JSON中的对象结构。 ### 步骤三:构建DataTable 接下来,我们需要构建一个`DataTable`实例,并填充它。这通常涉及解析JSON对象,并将每一项信息放入适当的列。 ```csharp using System; using System.Collections.Generic; using System.Data; using Newtonsoft.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { string jsonData = "{\"persons\": [{\"Name\":\"Alice\",\"Age\":25}, {\"Name\":\"Bob\",\"Age\":30}]}"; // 将JSON字符串转换为Person列表 var personsList = JsonConvert.DeserializeObject<List<Person>>(jsonData); // 创建DataTable DataTable dataTable = new DataTable(); // 添加列标题 foreach (var prop in typeof(Person).GetProperties()) { dataTable.Columns.Add(prop.Name); } // 将Person列表内容填充到DataTable中 foreach (var person in personsList) { DataRow dataRow = dataTable.NewRow(); foreach (var prop in typeof(Person).GetProperties()) { dataRow[prop.Name] = prop.GetValue(person, null); } dataTable.Rows.Add(dataRow); } // 打印结果确认 Console.WriteLine("Data Table:"); foreach (DataRow row in dataTable.Rows) { Console.WriteLine(string.Join(", ", row.ItemArray)); } } } ``` ### 相关问题: 1. **如何处理JSON中的嵌套结构**?当JSON包含嵌套数组或对象时,上述示例可以直接应用于每个层级吗? 2. **如何优化性能**?在处理大量数据时,直接解析整个JSON是否高效?有哪些替代策略可以提高性能? 3. **错误处理**:当输入的JSON字符串无效或格式不符合预期时,应该如何处理异常情况?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值