JObject 用法 、JProperty 用法、JArray 用法 Linq 转 Json

1、使用LINQ to JSON前,需要引用Newtonsoft.Json的dll和using Newtonsoft.Json.Linq的命名空间。LINQ to JSON主要使用到JObject, JArray, JProperty和JValue这四个对象,
JObject用来生成一个JSON对象,简单来说就是生成”{}”,
JArray用来生成一个JSON数组,也就是”[]”,
JProperty用来生成一个JSON数据,格式为key/value的值,
JValue则直接生成一个JSON值

来点干货

 BLL.addeditemgroup addeditemgroupBLL = new BLL.addeditemgroup();
            DataSet ds = addeditemgroupBLL.GetEditDataList(Id);

            JArray ja = new JArray();
            if (ds.Tables[0].Rows.Count>0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {

                   
                    JObject jo = new JObject(
                              new JProperty("id",ds.Tables[0].Rows[i]["id"]),
                              new JProperty("itemtypename", ds.Tables[0].Rows[i]["itemtypename"]),
                              new JProperty("addeditemgroupname", ds.Tables[0].Rows[i]["addeditemgroupname"]),
                              new JProperty("bId", ds.Tables[0].Rows[i]["bId"]),
                              new JProperty("addedItemItemName", ds.Tables[0].Rows[i]["addedItemItemName"]),
                              new JProperty("bigName", ds.Tables[0].Rows[i]["bigName"]));
                    ja.Add(jo);
                }
            }
              
            JObject joReturn = new JObject(new JProperty("data", ja),
                                           new JProperty("rsm",1),
                                           new JProperty("errno",""),
                                           new JProperty("errEng", "Operation succeeded"),
                                           new JProperty("err",""));

            return joReturn.ToString();


    或者:

    
JObject joReturn = new JObject(new JProperty("data", new JObject(new JProperty("list",ja))),
                  new JProperty("rsm",1),
                  new JProperty("errno",""),
                  new JProperty("errEng", "Operation succeeded"),
                  new JProperty("err",""));

 

最终生成Json 格式输出。

<think>嗯,用户让我介绍一下Newtonsoft.Json.Linq中的JObject的读写示例。首先,我需要确认用户对Newtonsoft.Json的了解程度。他们可能已经知道这是一个流行的JSON处理库,但可能不太清楚JObject的具体用法。我应该从基础开始,比如如何创建JObject,添加属性,读取值,修改和删除属性,以及序列化和反序列化。 用户可能需要的是实际的代码示例,所以应该准备一些简单的例子。比如,如何创建一个新的JObject,并添加不同的数据类型,如字符串、整数、数组和嵌套对象。然后,展示如何读取这些值,包括使用索引器、GetValue和Value<T>方法。同时,要提到处理可能不存在的属性时的注意事项,比如使用TryGetValue。 在修改和删除部分,需要说明如何通过索引器或Replace方法更新值,以及使用Remove方法删除属性。序列化和反序列化也是关键点,比如将JObject换为字符串,或者从JSON字符串解析成JObject。此外,用户可能对处理更复杂的结构感兴趣,比如嵌套对象或数组,应该给出相应的例子。 还要注意区分JObject和其他JToken类型,比如JArray,确保用户了解如何组合使用它们。可能还需要提醒用户关于异常处理,比如访问不存在的属性时会抛出异常,建议使用安全的方法来避免程序崩溃。 最后,确保示例代码简洁明了,注释清楚,帮助用户快速理解每一步的操作。如果有常见的用例或最佳实践,也可以简要提及,比如在动态构建JSON时使用JObject的便利性。总之,结构要清晰,覆盖主要的读写操作,并提供足够的示例来展示不同的用法场景。</think>以下是一个使用 Newtonsoft.Json.Linq 中的 `JObject` 进行 JSON 数据读写的简单示例: --- ### **1. 创建 JObject 并写入数据** ```csharp using Newtonsoft.Json.Linq; // 创建一个空的 JObject JObject person = new JObject(); // 添加属性(支持多种数据类型) person["name"] = "张三"; person["age"] = 25; person["isStudent"] = false; person["hobbies"] = new JArray("阅读", "编程", "运动"); // 嵌套数组 person["address"] = new JObject { { "city", "北京" }, { "street", "朝阳区" } }; // 嵌套对象 // 直接输出 JSON 字符串 Console.WriteLine(person.ToString()); // 输出结果: // { // "name": "张三", // "age": 25, // "isStudent": false, // "hobbies": ["阅读", "编程", "运动"], // "address": { "city": "北京", "street": "朝阳区" } // } ``` --- ### **2. 读取 JObject 中的数据** ```csharp // 从 JSON 字符串解析为 JObject string jsonStr = @"{ 'name': '李四', 'age': 30, 'isStudent': true }"; JObject data = JObject.Parse(jsonStr); // 读取属性(基本类型) string name = (string)data["name"]; int age = (int)data["age"]; bool isStudent = (bool)data["isStudent"]; // 安全读取(避免异常) if (data.TryGetValue("age", out JToken ageToken)) { Console.WriteLine($"年龄: {ageToken.Value<int>()}"); } // 读取嵌套对象或数组 JArray hobbies = (JArray)person["hobbies"]; JObject address = (JObject)person["address"]; string city = (string)address["city"]; ``` --- ### **3. 修改与删除属性** ```csharp // 修改属性 data["age"] = 31; // 使用 Replace 修改(适用于复杂操作) data.Property("isStudent").Replace(new JProperty("isStudent", false)); // 删除属性 data.Remove("isStudent"); ``` --- ### **4. 序列化与反序列化** ```csharp // JObject 字符串 string json = person.ToString(Formatting.Indented); // 带缩进格式 // 字符串 JObject JObject parsedObj = JObject.Parse(json); ``` --- ### **5. 复杂结构示例** ```csharp // 动态构建复杂 JSON JObject order = new JObject { {"orderId", 1001}, {"products", new JArray( new JObject { {"id", 1}, {"name", "手机"}, {"price", 2999} }, new JObject { {"id", 2}, {"name", "耳机"}, {"price", 399} } )} }; // 查询第一个产品价格 int firstProductPrice = (int)order["products"][0]["price"]; ``` --- ### **关键点总结** - **JObject** 表示 JSON 对象,继承自 `JContainer`,提供动态操作能力。 - 通过索引器 `["key"]` 直接访问属性,需注意类型换(如 `(string)` 或 `Value<T>()`)。 - **JArray** 用于处理 JSON 数组,可与 `JObject` 嵌套使用。 - 使用 `JObject.Parse()` 从字符串解析,`ToString()` 生成 JSON 字符串。 - 支持 LINQ 查询(如 `SelectToken("path")` 查询复杂路径)。 建议结合 Newtonsoft.Json 的异常处理机制(如 `JToken` 存在性检查)提升代码健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值