C# 如何使用System.Text.JSON忽略常量属性的JSON序列化?

C# 如何使用System.Text.JSON忽略常量属性的JSON序列化?,c#,json,json.net,system.text.json,C#,Json,Json.net,System.text.json,我正在尝试从Newtonsoft.Json迁移到System.Text.Json。“[Newtonsoft.Json.JsonIgnore]”用于在序列化过程中忽略常量属性,但“[System.Text.Json.serialization.JsonIgnore]”不起作用。我想知道附近是否有工作 所以我尝试着从 using Newtonsoft.Json; public class MyClass: MyBaseClass { [JsonIgnore] public cons

我正在尝试从Newtonsoft.Json迁移到System.Text.Json。“[Newtonsoft.Json.JsonIgnore]”用于在序列化过程中忽略常量属性,但“[System.Text.Json.serialization.JsonIgnore]”不起作用。我想知道附近是否有工作

所以我尝试着从

using Newtonsoft.Json;

public class MyClass: MyBaseClass
{
    [JsonIgnore]
    public const string MyConstString = "lets get rid of netwonsoft dependency";

    public string data;

    public String(string data)
    {
        this.data = data;
    }
}

错误描述为:; 属性“JsonIgnore”在此声明类型上无效。它仅对“属性,索引器”声明有效

是因为System.Text.Json不支持使用JsonIgnore,还是我遗漏了什么? 在这个问题上,我找不到任何有用的东西。你有什么想法吗?

JSON.Net属性设置为
AttributeTargets.Property | AttributeTargets.Field
,这意味着它可以在
常量上使用。但是,的新.NET核心API版本仅设置为
AttributeTargets.Property
。这意味着您只能在属性上使用它

话虽如此,JSON.Net不会序列化
const
值,除非您明确告诉它使用一个属性进行序列化,这使得添加另一个属性忽略它有点奇怪

例如,JSON.Net会将问题中的类序列化为:

{"data":"foo"}

System.Text.Json
中的serialiser将为您提供:

{}
所以另一个问题是新的API没有序列化字段。这样做的好处是,您应该使用现代C#技术,这意味着使用属性,例如:

public string data { get; set; }

属性声明通常有一个getter和/或setter。您可以尝试将其更改为
公共字符串MyConstString{get;}=“您的字符串”
System.Text.Json
不会序列化
const
无论如何,这里不需要该属性。事实上,Newtonsoft也不需要,不清楚为什么您的
const
上会有这个属性?也许您遇到的一个更大的问题是新的serialiser没有序列化字段,这意味着您需要将它们更改为属性。如果您使用
[JsonProperty]
属性显式标记值,则Newtonsoft只会序列化
常量
值。
public string data { get; set; }