gpt4 book ai didi

c# - 将字符串转换为类型 'System.Text.Json.JsonElement 时出错

转载 作者:行者123 更新时间:2023-12-05 02:08:34 24 4
gpt4 key购买 nike

我有一个类,其中我在从 json 文件中填充 jsonElement 时遇到了一些问题

{
"entities": [
{
"name": "DateTimeENT1",
"description": "This a example",
"uil": {
"uill": "This is my Layout"
}
}
]
}

正在被反序列化到这个类中:

public class Container {

public ICollection<Entity> Entities {get; set;}
}


public class Entity {
public string Name {get; set;}
public string Descripton {get; set;}
UIL Uil {get; set;}
}

public class UIL{
JsonElement Uill {get; set;}
}

这就是我反序列化它的方式:

var input= JsonConvert.DeserializeObject<Container>(File.ReadAllText(@"init.json"));

当我运行它时,我收到一条错误消息,指出 'Error converting value "This is my Layout" to type 'System.Text.Json.JsonElement'.我该如何克服这个问题?

所有这一切的奇怪之处在于我可以在我的 Controller 端点上使用相同的输入

public IActionResult Put([FromBody] Container container)

这毫无问题地创建了一个容器,带有给定的 json..那么为什么当我使用反序列化器时它不起作用?

最佳答案

您需要使用 JsonDocument.Parse而不是 JsonConverter.DeserializeObject

static void Main(string[] args)
{
var jsonInput= @"{
""entities"":
[
{
""name"": ""DateTimeENT1"",
""description"": ""This a example"",
""uil"": {
""uill"": ""This is my Layout""
}
}
]
}";

using (JsonDocument doc = JsonDocument.Parse(jsonInput))
{
JsonElement root = doc.RootElement;
JsonElement entities = root.GetProperty("entities");
//Assuming you have only 1 item, if you have more you can use EnumerateArray and MoveNext()..
JsonElement uilItem = entities[0].GetProperty("uil");
JsonElement uillItem = uilItem.GetProperty("uill");
Console.WriteLine(uillItem.GetString());
}
Console.ReadLine();
}

输出将是:

This is my Layout

关于c# - 将字符串转换为类型 'System.Text.Json.JsonElement 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60761709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com