JSON Newtonsoft C#-反序列化JSON文件中的特定字段
我正在处理一个巨大的JSON文件,其中只需要提取其中的一些字段。我一直在寻找一些反序列化的方法,但我不想在C#中创建整个类和对象,所有字段都在JSON中,这将是大量无用的内存 我可以使用Webclient获取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
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时,请切掉不需要的部分,以便我可以序列化它,我花了一些时间来修复它:DStackOverflow不是代码编写服务。我们协助解决具体问题。向我们展示您尝试过的内容以及您需要帮助的地方,我们可以提供帮助。展示一些代码,说明您尝试过的内容以及出现的问题。我们应该可以从那里得到帮助,因为目前的问题太广泛了,因为有多种方法可以做到这一点。带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代码>自内容以来