.net核心中的动态JSON解析

问题描述 投票:0回答:2

我们还有N个JSON参数和类属性,但必须动态删除序列化时类属性中不可用的JSON参数。

如果我使用[JsonIgnore]它只删除值,而不是整个属性;我们需要删除整个属性。

例:

JSON请求:

{
    "Name":"ABC",
    "Age":26,
    "Designation":"Er",
    "Place":"Pune",
    "Gender":"Male"
}

类:

[Serializable]
public class SampleProperties
{
    [JsonProperty("Name")]
    public string Name { get; set; }
    [JsonProperty("Age")]
    public int Age { get; set; }
    [JsonProperty("Designation")]
    public string Designation { get; set; }
}

结果期待:

{
    "Name":"ABC",
    "Age":26,
    "Designation":"Er"
} 
c# json .net-core
2个回答
3
投票

您可以像下面的代码一样设置NullValueHandling,你可以在Newtonoft.Json的documentation或者这个link上看到,此外,你可以使用ExpandoObject(),你可以在这个link上看到

public class Movie
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Classification { get; set; }
    public string Studio { get; set; }
    public DateTime? ReleaseDate { get; set; }
    public List<string> ReleaseCountries { get; set; }
}

Movie movie = new Movie();
movie.Name = "Bad Boys III";
movie.Description = "It's no Bad Boys";

string included = JsonConvert.SerializeObject(movie,
    Formatting.Indented,
    new JsonSerializerSettings { });

// {
//   "Name": "Bad Boys III",
//   "Description": "It's no Bad Boys",
//   "Classification": null,
//   "Studio": null,
//   "ReleaseDate": null,
//   "ReleaseCountries": null
// }

string ignored = JsonConvert.SerializeObject(movie,
    Formatting.Indented,
    new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

// {
//   "Name": "Bad Boys III",
//   "Description": "It's no Bad Boys"
// }

关于ExpandoObject的更多信息


0
投票

执行此操作的最佳方法是创建一个包含30个字段的对象,并将json字符串反序列化为此对象 尝试这样的事情:

class MyObject
{
    public string prop1 {get;set; }
    public string prop2 {get;set; }
}

然后 :

string json = "your json";
MyObject objectWith30Fields = JsonConvert.DeserializeObject<MyObject>(json);
© www.soinside.com 2019 - 2024. All rights reserved.