JSON Newtonsoft C#-反序列化JSON文件中的特定字段

JSON Newtonsoft C#-反序列化JSON文件中的特定字段,c#,json,json.net,C#,Json,Json.net,我正在处理一个巨大的JSON文件,其中只需要提取其中的一些字段。我一直在寻找一些反序列化的方法,但我不想在C#中创建整个类和对象,所有字段都在JSON中,这将是大量无用的内存 我可以使用Webclient获取JSON文件: using (WebClient wc = new WebClient()) { jsonWeb = wc.DownloadString("http://link_to_get_JSON"); } //Deserialize into a JObject JObjec

我正在处理一个巨大的JSON文件,其中只需要提取其中的一些字段。我一直在寻找一些反序列化的方法,但我不想在C#中创建整个类和对象,所有字段都在JSON中,这将是大量无用的内存

我可以使用Webclient获取JSON文件:

using (WebClient wc = new WebClient())
{
   jsonWeb = wc.DownloadString("http://link_to_get_JSON");
}

//Deserialize into a JObject
JObject obj = JObject.Parse(jsonWeb);

//Tried to access the info with
var val = obj.PropTwo;
var solution = obj.Descendants().OfType<JProperty>().Where(p => p.Name == "solverSolution").Select(x => x.Value.ToString()).ToArray();
在此,我先对社区表达我的感激之情。干杯


AndréCastro。

您可以使用JObject解析所有Json。然后,可以将特定子对象映射到对象


您可以使用JObject解析所有Json。然后,可以将特定子对象映射到对象


然后在对象中仅使用所需的属性,确保遵循所需模型的结构

public partial class RootObject {
    [JsonProperty("content")]
    public Content[] Content { get; set; }
}

public partial class Content {
    [JsonProperty("solverSolution")]
    public SolverSolution SolverSolution { get; set; }
}

public partial class SolverSolution {
    [JsonProperty("id")]
    public Guid Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("maxHeight")]
    public double MaxHeight { get; set; }

    [JsonProperty("layers")]
    public long Layers { get; set; }

    [JsonProperty("solution")]
    public Solution[] Solution { get; set; }

    [JsonProperty("default")]
    public bool Default { get; set; }
}

public partial class Solution {
    [JsonProperty("X1")]
    public long X1 { get; set; }

    [JsonProperty("Y1")]
    public long Y1 { get; set; }

    [JsonProperty("Z1")]
    public long Z1 { get; set; }

    [JsonProperty("X2")]
    public long X2 { get; set; }

    [JsonProperty("Y2")]
    public long Y2 { get; set; }

    [JsonProperty("Z2")]
    public long Z2 { get; set; }
}
解析器将忽略未映射到对象模型属性的其余部分

var root = Jsonsonvert.DeserializeObject<RootObject>(jsonWeb);
var solverSolution = root.Content[0].SolverSolution;

然后仅在对象中使用所需的特性,确保遵循所需模型的结构

public partial class RootObject {
    [JsonProperty("content")]
    public Content[] Content { get; set; }
}

public partial class Content {
    [JsonProperty("solverSolution")]
    public SolverSolution SolverSolution { get; set; }
}

public partial class SolverSolution {
    [JsonProperty("id")]
    public Guid Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("maxHeight")]
    public double MaxHeight { get; set; }

    [JsonProperty("layers")]
    public long Layers { get; set; }

    [JsonProperty("solution")]
    public Solution[] Solution { get; set; }

    [JsonProperty("default")]
    public bool Default { get; set; }
}

public partial class Solution {
    [JsonProperty("X1")]
    public long X1 { get; set; }

    [JsonProperty("Y1")]
    public long Y1 { get; set; }

    [JsonProperty("Z1")]
    public long Z1 { get; set; }

    [JsonProperty("X2")]
    public long X2 { get; set; }

    [JsonProperty("Y2")]
    public long Y2 { get; set; }

    [JsonProperty("Z2")]
    public long Z2 { get; set; }
}
解析器将忽略未映射到对象模型属性的其余部分

var root = Jsonsonvert.DeserializeObject<RootObject>(jsonWeb);
var solverSolution = root.Content[0].SolverSolution;
我使用:

JsonConvert.DeserializeObject(stringInput)
要得到匿名类型,我需要

然后,您可以使用类似这样的方法来获取特定零件:

var obj = JsonConvert.DeserializeObject<dynamic>(input)["content"][0]["solverSolution"];
var obj=JsonConvert.DeserializeObject(输入)[“内容”][0][“解决方案”];
这很简单,能让我完成任务

编辑: 请注意,下一次上传json时,请切掉不需要的部分,以便我可以序列化它,我花了一些时间来修复它:D

我使用:

JsonConvert.DeserializeObject<dynamic>(stringInput)
JsonConvert.DeserializeObject(stringInput)
要得到匿名类型,我需要

然后,您可以使用类似这样的方法来获取特定零件:

var obj = JsonConvert.DeserializeObject<dynamic>(input)["content"][0]["solverSolution"];
var obj=JsonConvert.DeserializeObject(输入)[“内容”][0][“解决方案”];
这很简单,能让我完成任务

编辑:

请注意,下一次上传json时,请切掉不需要的部分,以便我可以序列化它,我花了一些时间来修复它:D

StackOverflow不是代码编写服务。我们协助解决具体问题。向我们展示您尝试过的内容以及您需要帮助的地方,我们可以提供帮助。展示一些代码,说明您尝试过的内容以及出现的问题。我们应该可以从那里得到帮助,因为目前的问题太广泛了,因为有多种方法可以做到这一点。带a的东西将是这里的方式。只是编辑了有关我尝试的内容的更多信息。如果不在c#中创建对象,您可能不得不求助于一些创造性的字符串操作。StackOverflow不是代码编写服务。我们协助解决具体问题。向我们展示您尝试过的内容以及您需要帮助的地方,我们可以提供帮助。展示一些代码,说明您尝试过的内容以及出现的问题。我们应该能够从那里提供帮助,因为目前问题太广泛,因为有多种方法可以做到这一点。带a的东西将是这里的方式。只是编辑了有关我尝试的内容的更多信息。没有在c#中创建对象,你可能不得不求助于一些创造性的字符串操作。你应该在答案中显示更多细节,因为链接可能会失效。使用链接作为参考,但在解决问题所需的答案a中加入尽可能多的细节。这与“不想在C#中创建整个对象”的要求如何相符?欢迎使用StackOverflow。我们非常感谢您的推荐,但下面的代码将展示如何将您的答案从“可能的评论”改进为其他人建议的正确答案。请参阅对问题的高投票率答案的示例,这些示例还可能为您提供如何根据您的知识创建一个好答案的想法。以下是您引用的《精确参考》作者提供的一个好答案示例:请注意,它相当简短,但确实包含示例代码。想一想好的答案,既要说也要说!你应该在答案中显示更多细节,因为链接可能会失效。使用链接作为参考,但在解决问题所需的答案a中加入尽可能多的细节。这与“不想在C#中创建整个对象”的要求如何相符?欢迎使用StackOverflow。我们非常感谢您的推荐,但下面的代码将展示如何将您的答案从“可能的评论”改进为其他人建议的正确答案。请参阅对问题的高投票率答案的示例,这些示例还可能为您提供如何根据您的知识创建一个好答案的想法。以下是您引用的《精确参考》作者提供的一个好答案示例:请注意,它相当简短,但确实包含示例代码。想一想好的答案,既要说也要说!我要试试看!非常感谢。若要自己对任何JSON对象执行此操作……使用Visual Studio,您可以直接将JSON字符串复制并粘贴到C#类中,这样您就可以完全按照上面所示将字符串反序列化到这些类中。@jcc同意,但OP不需要任何其他属性。我用了你建议的方法。我刚刚从JSON中删除了不需要的字段并生成了所需的类。嘿,@Nkosi。上述代码有效。如果我想访问第一个SolverSolution,我可以这样做
var SolverSolution=root.Content.first().SolverSolution因为
内容
有许多
解决方案
s。我怎样才能把它们都买下来
SolverSolution[]solutions=root.Content…
我将尝试一下!非常感谢。若要自己对任何JSON对象执行此操作……使用Visual Studio,您可以直接将JSON字符串复制并粘贴到C#类中,这样您就可以完全按照上面所示将字符串反序列化到这些类中。@jcc同意,但OP不需要任何其他属性。我用了你建议的方法。我刚刚从JSON中删除了不需要的字段并生成了所需的类。嘿,@Nkosi。上述代码有效。如果我想访问第一个SolverSolution,我可以这样做
var SolverSolution=root.Content.first().SolverSolution
内容以来