【问题标题】:Making property [NonSerialized] for a value为值创建属性 [NonSerialized]
【发布时间】:2021-05-24 07:07:42
【问题描述】:

我想弄清楚如何为一个值创建一个属性 [NonSerialized]

看看这个:

using System;
using System.Text.Json;
 
class Test
{
    public static bool GoingToBeSerialized = false;
 
 
    public int PaymentForTheDay { get; set; }
    public int NumberOfDays { get; set; }
 
    // i want to disable it if GoingToBeSerialized is true
    [System.Text.Json.Serialization.JsonIgnore] 
    public int TotalPayment;
 
    public  bool ShouldSerializeTotalPayment() => GoingToBeSerialized;
}

谢谢。

【问题讨论】:

  • AFAIK“条件序列化”默认情况下不适用于BinaryFormatter,除非您实现ISerializable 并手动执行;但是,BinaryFormatter 被认为已弃用且危险,所以说实话:您不应该使用它 - 几乎任何其他序列化程序都会更好,许多人会直接使用 public bool ShouldSerializeTotalPayment() => GoingToBeSerialized;
  • 我正在尝试使用 Json 进行序列化,我该如何使用 public bool ShouldSerializeTotalPayment() => GoingToBeSerialized; ??
  • 我只是想检查一下:你确定你真的在使用BinaryFormatter吗?我经常看到人们将类型标记为[Serializable] 以与XmlSerializerJsonConvert 等一起使用——而[Serializable]什么都不做
  • @Shamilx "with JSON" - 使用什么序列化程序?你能展示你用来序列化的代码吗?很重要
  • @Shamilx 很棒; 如何您尝试使用 JSON 进行序列化?请向我们展示您序列化的代码行 - 这可能足以让我们确定您正在使用哪个 JSON 序列化程序(有很多)

标签: c# json-serialization


【解决方案1】:

请注意,[Serializable][NonSerialized](在原始问题中,现已在编辑中删除)对大多数序列化程序 - 它们仅适用于 BinaryFormatter,而你不是使用。

很有可能只需使用:

public int TotalPayment {get;set;}
public bool ShouldSerializeTotalPayment() => GoingToBeSerialized;

会做你想做的;最近添加了显示您正在使用 Json.NET 的 pastebin,这确实应该有效 - conditional serialization is a Json.NET feature using the standard pattern。另请注意,我将TotalPayment 设为属性,并删除了[JsonIgnore]

【讨论】:

  • 哦,我明白了,让我试试吧
  • 所以我需要Newtonsoft.Json.JsonConvert 来实现这个
  • @Shamilx 哦该死,我误读了属性;我以为你在使用 Json.NET——我的错;不幸的是细节很重要:) System.Text.Json 确实不支持这种形式的条件序列化 (it has some very primitive options)
  • 我已经下载了,运行正常,非常感谢
猜你喜欢
  • 2011-07-25
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多