hl301 发表于 2022-6-18 22:39

C# Json遍历

本帖最后由 hl301 于 2022-6-18 22:41 编辑

{
    "code": 1,
    "msg": "success",
    "body": {
      "periods": [
            {
                "id": 103281,
                "name": "典礼",
                "periodStatus": "finish",
                "beginDate": 1648209600000,
                "endDate": 1648215000000,
                "isFreeStudy": false,
                "sort": 1
            },
            {
                "id": 103282,
                "name": "入门",
                "periodStatus": "finish",
                "beginDate": 1648296000000,
                "endDate": 1648301400000,
                "isFreeStudy": false,
                "sort": 2
            },
            {
                "id": 103283,
                "name": "辅导",
                "periodStatus": "finish",
                "beginDate": 1648641600000,
                "endDate": 1648647000000,
                "isFreeStudy": false,
                "sort": 3
            },

C#引用Newtonsoft.Json如何获取所有body.periods.Name数据呢
查找了百度还是没解决,特来向论坛各位大佬求助。

jidesheng6 发表于 2022-6-18 23:18

引入他的linq然后使用jobj和jtoken即可

hl301 发表于 2022-6-18 23:20

jidesheng6 发表于 2022-6-18 23:18
引入他的linq然后使用jobj和jtoken即可

大佬,能帮忙给写下么?因为我在百度好长时间,实在没辙跑来论坛问了,拜托了。

jidesheng6 发表于 2022-6-18 23:23

hl301 发表于 2022-6-18 23:20
大佬,能帮忙给写下么?因为我在百度好长时间,实在没辙跑来论坛问了,拜托了。

简单来说,就是先使用using Newtongsof.Json.Linq
然后使用jobject.parse来把你的字符串转换为json数据,每个数据都是jtoken有的可以是jarray,我有点记不清了,最近没用过它了,可能记不清了,但是你在百度上去搜索这个类库加上Linq和Jobject应该可以找到相关的例子。

hl301 发表于 2022-6-18 23:30

jidesheng6 发表于 2022-6-18 23:23
简单来说,就是先使用using Newtongsof.Json.Linq
然后使用jobject.parse来把你的字符串转换为json数据 ...

谢了,我查查。

cdj68765 发表于 2022-6-18 23:45

你这个Json不全,针对你现在的这个Json,可以用的代码是
      static Root JsonDeserialize(string JsonString)
      {
            return Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(JsonString);
      }
      public class Root
      {
            /// <summary>
            ///
            /// </summary>
            public int code { get; set; }

            /// <summary>
            ///
            /// </summary>
            public string msg { get; set; }

            /// <summary>
            /// body
            /// </summary>
            public Body body { get; set; }

            public class Body
            {
                /// <summary>
                /// periods
                /// </summary>
                public List<Periods> periods { get; set; }

                public class Periods
                {
                  /// <summary>
                  ///
                  /// </summary>
                  public int id { get; set; }

                  /// <summary>
                  /// 典礼
                  /// </summary>
                  public string name { get; set; }

                  /// <summary>
                  ///
                  /// </summary>
                  public string periodStatus { get; set; }

                  /// <summary>
                  ///
                  /// </summary>
                  public long beginDate { get; set; }

                  /// <summary>
                  ///
                  /// </summary>
                  public long endDate { get; set; }

                  /// <summary>
                  ///
                  /// </summary>
                  public string isFreeStudy { get; set; }

                  /// <summary>
                  ///
                  /// </summary>
                  public int sort { get; set; }
                }
            }
      }
对了,你这个Json末尾我加了一点,不然解析不出来
{
"code": 1,
"msg": "success",
"body": {
"periods": [
{
"id": 103281,
"name": "典礼",
"periodStatus": "finish",
"beginDate": 1648209600000,
"endDate": 1648215000000,
"isFreeStudy": false,
"sort": 1
},
{
"id": 103282,
"name": "入门",
"periodStatus": "finish",
"beginDate": 1648296000000,
"endDate": 1648301400000,
"isFreeStudy": false,
"sort": 2
},
{
"id": 103283,
"name": "辅导",
"periodStatus": "finish",
"beginDate": 1648641600000,
"endDate": 1648647000000,
"isFreeStudy": false,
"sort": 3
}
]
}
}

方法是 先去https://www.toolscat.com/json/json-csharp,把你的Json粘贴进去,如果格式正确的话,就能生成实体类
把实体类一个个复制到代码里面去
然后调用Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(JsonString);就能反而你要的数据了

ykrne 发表于 2022-6-18 23:50

先建模,然后直接 反序列化成这个模型就行了

另外建议用 System.Text.Json

hl301 发表于 2022-6-18 23:55

cdj68765 发表于 2022-6-18 23:45
你这个Json不全,针对你现在的这个Json,可以用的代码是
      static Root J ...

我是通过VS将json粘贴为实体类,还是无法取出,还是谢过兄弟了。

hl301 发表于 2022-6-18 23:56

ykrne 发表于 2022-6-18 23:50
先建模,然后直接 反序列化成这个模型就行了

另外建议用 System.Text.Json

哥们,能否给个例程。

troybug 发表于 2022-6-19 00:02

我用的LitJson,不用建实体类,将json作为字符串解析就行了
using System;
using LitJson;

public class Program {
        public static void Main() {
                string json = @"{
                        'code': 1,
                        'msg': 'success',
                        'body': {
                                'periods': [
                                        {
                                                'id': 103281,
                                                'name': '典礼'
                                        },
                                        {
                                                'id': 103282,
                                                'name': '典礼2'
                                        }
                                ]
                        }
                }";

                var res = JsonMapper.ToObject(json);

                for (var i = 0; i < res["body"]["periods"].Count; i++) {
                        Console.WriteLine(res["body"]["periods"]["name"]);
                }

        }
}
页: [1] 2
查看完整版本: C# Json遍历