【发布时间】: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<EValues>(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<dynamic>(serializedObject) };?您的输入 JSON 没有{ "values" : {} }嵌套,因此它不能反序列化为EValues是合理的。
标签: c# json serialization json.net deserialization