如何在列表 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

如另一个答案所示,如果您希望此行为仅在此模型中发生,则建议使用 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;
 });