我们还有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"
}
您可以像下面的代码一样设置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的更多信息
执行此操作的最佳方法是创建一个包含30个字段的对象,并将json字符串反序列化为此对象 尝试这样的事情:
class MyObject
{
public string prop1 {get;set; }
public string prop2 {get;set; }
}
然后 :
string json = "your json";
MyObject objectWith30Fields = JsonConvert.DeserializeObject<MyObject>(json);