【问题标题】:Splitting a part of a JSON string to deserialize拆分 JSON 字符串的一部分以反序列化
【发布时间】:2018-01-27 05:59:13
【问题描述】:

我有一个不想完全反序列化的 JSON 字符串。我只想反序列化 JSON 字符串中的内容。

这就是字符串的样子:

"{\"content\":{\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1},\"status\":200,\"id\":\"test\",\"method\":\"accounts_login\"}"

我只需要内容对象。所以我需要制作一个 Regex(?) 可以把这个字符串变成:

"{\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1}"

最好的方法是什么?

【问题讨论】:

  • 最好的方法是反序列化整个东西,然后只使用你需要的部分。
  • 为什么不直接使用 Newtonsoft.Json 并反序列化所有内容,只使用您需要的内容?

标签: c# json regex


【解决方案1】:

您可以使用 Newtonsoft.Json 做到这一点,就像

var json = "{\'content\':{\'token\':\'*************************\',\'is_verified\':1,\'account_id\':45087,\'is_starter\':0,\'days_left\':1},\'status\':200,\'id\':\'test\',\'method\':\'accounts_login\'}";

var jToken = JToken.Parse(json);
var contentToken = jToken["content"]; //This selects the Json-Node
var content = contentToken.ToObject<YourContentClass>();

【讨论】:

    【解决方案2】:

    在我看来,最好的方法是在数据层级别反序列化整个 JSON 字符串。并且,反序列化为一个对象后,从另一个层的对象中选择你需要的数据:业务层。

    如何将 JSON 字符串反序列化为对象在本主题中进行了说明:Deserialize JSON with C#

    public class Rootobject
        {
            public Content content { get; set; }
            public int status { get; set; }
            public string id { get; set; }
            public string method { get; set; }
        }
    
        public class Content
        {
            public string token { get; set; }
            public int is_verified { get; set; }
            public int account_id { get; set; }
            public int is_starter { get; set; }
            public int days_left { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                string json =
                    "{\"content\":{\"token\":\"*************************\",\"is_verified\":1,\"account_id\":45087,\"is_starter\":0,\"days_left\":1},\"status\":200,\"id\":\"test\",\"method\":\"accounts_login\"}";
    
                Rootobject rootobject = new JavaScriptSerializer().Deserialize<Rootobject>(json);
    
                Content content = rootobject.content; // Select what you need
    
                System.Console.ReadKey();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多