首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为类型'System.Text.Json.JsonElement‘时出错

将字符串转换为类型'System.Text.Json.JsonElement‘时出错
EN

Stack Overflow用户
提问于 2020-03-20 00:55:29
回答 2查看 2.7K关注 0票数 1

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

代码语言:javascript
运行
复制
{
    "entities": [
        {
            "name": "DateTimeENT1",
            "description": "This a  example",
            "uil": {
                      "uill": "This is my Layout"
            }
        }
    ]
}

它正被反序列化为这个类:

代码语言:javascript
运行
复制
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;}
}

下面是我反序列化它的方法:

代码语言:javascript
运行
复制
var input= JsonConvert.DeserializeObject<Container>(File.ReadAllText(@"init.json"));

当我运行这个程序时,我得到一个错误,说明'Error converting value "This is my Layout" to type 'System.Text.Json.JsonElement'.,我如何克服这个问题?

奇怪的是,我可以在我的控制器端点上使用相同的输入

代码语言:javascript
运行
复制
public IActionResult Put([FromBody] Container container)

它使用给定的json创建一个容器..那么,当我使用反序列化程序时,为什么它不起作用呢?

EN

回答 2

Stack Overflow用户

发布于 2020-03-20 02:27:01

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

代码语言:javascript
运行
复制
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();
}

输出将为:

这是我的布局

票数 2
EN

Stack Overflow用户

发布于 2020-03-20 01:09:59

解释您的JSON与您发布的JSON类似,您应该更改您的Entity类,并将UIL的属性声明为string:

代码语言:javascript
运行
复制
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 {
    public string Uill {get; set;}
}

JsonElement is a struct和我不知道你为什么要映射到这个结构。

端点可能正在工作,因为它没有像您所希望的那样映射该属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60761709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档