如何从JSON文件反序列化.NET Core中封装的对象表? - c#

我想从外部API检索足球联赛的集合。来自服务器的响应如下所示:

{
"api": {
    "results": 1496,
    "leagues": [
        {
            "league_id": 1,
            .....

返回的对象由“ api”字段组成,其中包含“结果”和“联盟”。我想反序列化代码并将其映射到代码中的联赛类对象。

var jsonString = await ExecuteUrlAsync(filePath, url);

var results = JsonConvert.DeserializeObject<IEnumerable<LeagueEntity>>(jsonString);

jsonString是正确的,但是当程序到达第二行时,出现异常:

Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.IEnumerable".

我需要转到JSON文件中的“联盟”字段,并忽略其余的响应。如何实现?

参考方案

假设您的LeagueEntityapi.leagues[*]对象相对应,则可以使用JsonConvert.DeserializeAnonymousType()挑选并反序列化JSON的有趣部分:

var leagues = JsonConvert.DeserializeAnonymousType(jsonString, 
                                                   new { api = new { leagues = default(List<LeagueEntity>) } })
    ?.api?.leagues;

这避免了为api.leagues容器对象创建显式数据模型的需要。它也应该比预加载到JToken层次结构中更有效,然后作为第二步选择并反序列化api.leagues数组。

演示小提琴here。

(或者,您可以使用How to auto-generate a C# class file from a JSON string的答案之一为整个JSON自动生成完整的数据模型。)

JSON.NET如何删除节点 - c#

我有一个像下面这样的json:{ "d": { "results": [ { "__metadata": { }, "prop1": "value1", "prop2": "value2", "__some&#…

如何在ASP.NET Page_Load事件中识别RadButton启动回发的原因? - c#

在我的ASP.NET页的Page_Load中,我试图确定某个按钮是否已单击并尝试回发:if (Page.IsPostBack) { if (Request.Params.Get("__EVENTARGUMENT") == "doStuff") doSomething(); } doStuff是标记内的JavaScrip…

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…

如何将POCO类传递给.NET Core配置 - c#

我正在进行.NET Core应用程序的集成测试,并且想要使用一些测试配置。我的配置是一个POCO类,该类通过appsettings.json配置,然后通过IOptions<T>使用。在我的测试中,我想使用该类的实例。这是代码: var mySettings = GetTestSettings(); // factory method return…

弹出不去发布在asp.net - c#

我有一个叫做sales的按钮,当我单击cancel it backback并插入表单中的值时,它有一个JavaScript弹出窗口,但是当我单击ok时,它不会回发,并且表单中的值也不会进入数据库( JavaScript按钮实际上是打印调用,当单击该按钮时,它会在打印对话框打开时要求打印,它不会回发并且数据库中未插入数据)这是JavaScript代码funct…