【问题标题】:How to deserialize Json to an object?如何将 Json 反序列化为对象?
【发布时间】:2019-05-16 20:54:27
【问题描述】:

我想将 json 转换为特定对象。

String : "{\r\n \"Status\": \"PLANNED\"\r\n}"

我尝试了 Newtonsoft Json 命名空间,但它返回一个空值。

var Json= Newtonsoft.Json.JsonConvert.DeserializeObject<Model Class>(String )

我想要 Json 格式的结果,以便我可以从 Json 中提取值作为“PLANNED”,但我得到一个空值。

PS:模型类包含两个属性,Name(字符串类型),Value(对象类型)

【问题讨论】:

  • 我觉得应该有人指出json是一个字符串,所以你不是从字符串转换为json,而是从json转换为一个类

标签: c# json json.net


【解决方案1】:
var s = "{\r\n  \"Status\": \"PLANNED\"\r\n}";
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<StatusModel>(s);

您定义的模型不正确。 你的模型应该是这样的:

public class StatusModel
{
    public string Status { get; set; }
}

现在值将被提取到此模型中,您可以像这样访问该值:

var value = obj.Status; //"PLANNED"

【讨论】:

    【解决方案2】:

    JSON 定义

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。人类很容易阅读和写作。机器很容易解析和生成。它基于 JavaScript 编程语言的一个子集。

    [来源]https://www.json.org/

    JSON Newtonsoft

    Json.NET 是一种流行的高性能 JSON 框架,适用于 .NET。

    [来源]https://www.newtonsoft.com/json

    问题:

    您正在尝试将 json 反序列化为对象,但它返回 null。 在我们的上下文中,反序列化是将 json 转换为对象的过程。

    var Result= Newtonsoft.Json.JsonConvert.DeserializeObject&lt;Model Class&gt;(String);

    结果是 Null 的原因是因为您将 json 反序列化为 Model,知道您的 Json 不对应于 Model ,这就是为什么 Json 需要与 Model 对应,这样才能存储 Json 的信息。

    你的模特:

    模型可能包含一些不在 json 中的属性,反之亦然

    public class StatusModel
    {
       public string Status { get; set; }
    }
    

    最好的问候。

    【讨论】:

    • 您的模型类应该只包含一个名为“状态”的字符串类型的属性
    【解决方案3】:

    你可以这样做(使用 Newtonsoft 框架)

    using System;
    using Newtonsoft.Json;
    {
        public class JsonHandler : IJsonHandler
        {
            public IJsonModel ReadJson(IJsonModel model, StreamReader reader)
            {
                try
                {
                    string jsonFromFile;
                    using (reader))
                    {
                        jsonFromFile = reader.ReadToEnd();
                    }
    
                    status = JsonConvert.DeserializeObject<model>(jsonFromFile);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                return status;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多