如何在列表 class 中隐藏 属性
How can I hide property in list class
我有一个问题,确实需要一些解决方案。
我的class在下面。
public class Attributes
{
public int attributeId { get; set; }
public int ?attributeValueId { get; set; }
public string customAttributeValue { get; set; }
}
public class Products
{
public string barcode { get; set; }
public string title { get; set; }
public string productMainId { get; set; }
public List<Attributes> attributes { get; set; }
}
我不希望它可见 Json 是在我无法为 customAttributeValue 属性 赋值时创建的。
每次我得到下面的输出。
每次得到下面的输出。
"attributes": [
{
"attributeId": 338,
"attributeValueId": 3961,
"customAttributeValue": null
},
{
"attributeId": 343,
"attributeValueId": 4294,
"customAttributeValue": null
},
{
"attributeId": 47,
"attributeValueId": 0,
"customAttributeValue": "Black"
}
]
我需要发这种类型的..
"attributes": [
{
"attributeId": 338,
"attributeValueId": 6980
},
{
"attributeId": 47,
"customAttributeValue": "BLACK"
},
{
"attributeId": 346,
**attributeValueId": 4290**
感谢您的帮助。
下面的示例使用 JsonIgnoreAttribute 从序列化中排除 属性。
[JsonIgnore]
public string PasswordHash { get; set; }
https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
当您只想处理空值时
https://www.newtonsoft.com/json/help/html/NullValueHandlingIgnore.htm
你可以这样做:
public class Vessel{
public string Name { get; set; }
public string Class { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? LaunchDate { get; set; }}
string json = JsonConvert.SerializeObject(vessel, Formatting.Indented);
和
的输出
Vessel vessel = new Vessel{
Name = "Red October",
Class = "Typhoon"};
将是:
{
"Name": "Red October",
"Class": "Typhoon"
}
如另一个答案所示,如果您希望此行为仅在此模型中发生,则建议使用 JsonPropertyAttribute
是一个很好的解决方案。
public class Attributes
{
public int attributeId { get; set; }
public int ?attributeValueId { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string customAttributeValue { get; set; }
}
或者如果您只想在一种情况下发生这种情况并避免更改模型,您可以这样做:
string jsonOutput= JsonConvert.SerializeObject(instanceOfProduct, Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
但是,如果您希望这种行为在全球范围内发生,那么您可以像这样在启动时设置 JSON 序列化设置(.NET core 3.1 网络应用程序):
services.AddMvc()
.AddJsonOptions(options => {
options.JsonSerializerOptions.IgnoreNullValues = true;
});
我有一个问题,确实需要一些解决方案。 我的class在下面。
public class Attributes
{
public int attributeId { get; set; }
public int ?attributeValueId { get; set; }
public string customAttributeValue { get; set; }
}
public class Products
{
public string barcode { get; set; }
public string title { get; set; }
public string productMainId { get; set; }
public List<Attributes> attributes { get; set; }
}
我不希望它可见 Json 是在我无法为 customAttributeValue 属性 赋值时创建的。 每次我得到下面的输出。
每次得到下面的输出。
"attributes": [
{
"attributeId": 338,
"attributeValueId": 3961,
"customAttributeValue": null
},
{
"attributeId": 343,
"attributeValueId": 4294,
"customAttributeValue": null
},
{
"attributeId": 47,
"attributeValueId": 0,
"customAttributeValue": "Black"
}
]
我需要发这种类型的..
"attributes": [
{
"attributeId": 338,
"attributeValueId": 6980
},
{
"attributeId": 47,
"customAttributeValue": "BLACK"
},
{
"attributeId": 346,
**attributeValueId": 4290**
感谢您的帮助。
下面的示例使用 JsonIgnoreAttribute 从序列化中排除 属性。
[JsonIgnore]
public string PasswordHash { get; set; }
https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
当您只想处理空值时
https://www.newtonsoft.com/json/help/html/NullValueHandlingIgnore.htm
你可以这样做:
public class Vessel{
public string Name { get; set; }
public string Class { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? LaunchDate { get; set; }}
string json = JsonConvert.SerializeObject(vessel, Formatting.Indented);
和
的输出Vessel vessel = new Vessel{
Name = "Red October",
Class = "Typhoon"};
将是:
{ "Name": "Red October", "Class": "Typhoon" }
如另一个答案所示,如果您希望此行为仅在此模型中发生,则建议使用 JsonPropertyAttribute
是一个很好的解决方案。
public class Attributes
{
public int attributeId { get; set; }
public int ?attributeValueId { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string customAttributeValue { get; set; }
}
或者如果您只想在一种情况下发生这种情况并避免更改模型,您可以这样做:
string jsonOutput= JsonConvert.SerializeObject(instanceOfProduct, Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
但是,如果您希望这种行为在全球范围内发生,那么您可以像这样在启动时设置 JSON 序列化设置(.NET core 3.1 网络应用程序):
services.AddMvc()
.AddJsonOptions(options => {
options.JsonSerializerOptions.IgnoreNullValues = true;
});