【问题标题】:"Cannot deserialize the current JSON object into type“无法将当前 JSON 对象反序列化为类型
【发布时间】:2019-06-07 07:01:10
【问题描述】:

所以我有以下任务 - 我需要反序列化存储在我的应用程序的资源文件夹中的 Jason 对象数组。

到目前为止,我已经访问了资源并将其存储到一个 var 中:

var jsonData = Resources.SamplePoints;

将数组转换为字符串:

string jsonObjts = Encoding.Default.GetString(jsonData);

并已尝试将结果写入字典列表

List<Dictionary<string, double>> EntityData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, double>>>(jsonObjts);

但是,当我运行和测试应用程序时,会出现上述错误消息。

谁能让我走上正确的道路如何解决这个问题?

相关对象的样本:

"samples": [
{
    "date": "2014-08-10T09:00:00Z",
    "temperature": 10,
    "pH": 4,
    "phosphate": 4,
    "chloride": 4,
    "nitrate": 10
},
{
    "date": "2014-08-12T09:05:00Z",
    "temperature": 10.5,
    "pH": 5,
    "chloride": 4,
    "phosphate": 4
},

【问题讨论】:

  • 确保您的Deserialization 对象有一个名为samples 的属性,它属于IEnumerable 类型。或者您最好发布用于deserialization 的对象。
  • 可能,“日期”:“2014-08-12T09:05:00Z”是个问题。尝试 List> 或 List> 并通过 double.Parse 重新解析数字。
  • 并在使用 JSON.NET 之前阅读此内容newtonsoft.com/json/help/html/SerializingCollections.htm
  • 您可以从这里json2csharp.com根据JSON响应生成C#对象

标签: c# json deserialization


【解决方案1】:

您是否有不想创建一个类来表示您的 JSON 的原因?

public class Rootobject
{
    public List<Sample> Samples { get; set; }
}

public class Sample
{
    public DateTime Date { get; set; }
    public float Temperature { get; set; }
    public int Ph { get; set; }
    public int Phosphate { get; set; }
    public int Chloride { get; set; }
    public int Nitrate { get; set; }
}

然后你可以反序列化:

var obj = JsonConvert.DeserializeObject<Rootobject>(json);

如果你仍然想使用字典,我认为你需要这样的东西:

var obj = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, object>>>>(json);

【讨论】:

  • 谢谢这两种情况都有效。我将使用一个类来表示我的 Jason 对象
【解决方案2】:

您在泛型类型List&lt;Dictionary&lt;string, double&gt;&gt; 中的架构与 json 架构不匹配。如果您想转换为List&lt;Dictionary,则不能使用"samples": [,为此您需要Dictionary&lt;string,List&lt;Dictionary。 此外,当您尝试使用double 时,日期不会被解析为加倍。所以也许你可以试试Dictionary&lt;string, List&lt;Dictionary&lt;string, object&gt;&gt;&gt;。理想情况下,您应该为此结构创建类,而不是使用通用列表、字典结构。如果您使用的是 Visual Studio,则可以使用 Edit->Paste special->paste json as classes 创建这些类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-03-18
    • 1970-01-01
    • 2022-06-11
    • 2021-08-10
    相关资源
    最近更新 更多