【问题标题】:Deserialize JSON to a dynamic object or a class in C#将 JSON 反序列化为 C# 中的动态对象或类
【发布时间】:2022-01-21 12:54:22
【问题描述】:

我正在尝试将 JSON 反序列化为一个对象,以便将其添加到弹性搜索中。 JSON 在项目中可以是许多不同的对象类型,所以我希望函数是动态的。

首先我序列化从 EF Core 上下文中获得的数据

var serializedObject = JsonConvert.SerializeObject(document, Formatting.None,
                       new JsonSerializerSettings()
                       {
                           ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                       });

接下来我想反序列化为一个对象。例如,如果我有

public class EValues 
{
    public dynamic values { get; set; }
}

var test =  JsonConvert.DeserializeObject<EValues>(serializedObject.ToString());

我希望将 JSON 反序列化为以下内容:

{
   "values":{
      "StudentId":"60712555-ff1d-4a3e-8c81-08d9c2fc4423",
      "Student":{
         "Name":"string",
         "Country":"string",
         "Street":"string"
      }
   }
}

serializedObject JSON 我实际上正在尝试反序列化:

{
   "StudentId":"60712555-ff1d-4a3e-8c81-08d9c2fc4423",
   "Student":{
      "Name":"string",
      "Country":"string",
      "Street":"string"
   }
}

【问题讨论】:

  • 那么,您的问题是什么?似乎JsonConvert.DeserializeObject&lt;EValues&gt;(serializedObject.ToString()) 应该可以工作;你试过吗?有问题吗?
  • 在这种情况下,当我反序列化 @dbc 时,这些值始终为空
  • 问题出在哪里?是字符串serializedObject 中的值为null,还是serializedObject 的数据正确但test.values 中的值为null?我试图将您问题中显示的 JSON 反序列化为 EValues,但我无法重现您的问题,请参阅 dotnetfiddle.net/KGmTs1。所以我想我们需要看到minimal reproducible example 来帮助你。
  • @dbc 我用它当前拥有的 JSON 更新了问题。我希望价值观出现在它的前面
  • 为什么不直接做var test = new EValues { values = JsonConvert.DeserializeObject&lt;dynamic&gt;(serializedObject) };?您的输入 JSON 没有 { "values" : {} } 嵌套,因此它不能反序列化为 EValues 是合理的。

标签: c# json serialization json.net deserialization


【解决方案1】:

你可以这样做:

var test = new EValues { 
    values = JsonConvert.DeserializeObject<dynamic>(serializedObject) 
};

对应于EValues 的 JSON 将具有额外级别的嵌套 { "values" : {} } 不存在于您的 serializedObject JSON 中。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多