C# 如何使用System.Text.JSON忽略常量属性的JSON序列化?
我正在尝试从Newtonsoft.Json迁移到System.Text.Json。“[Newtonsoft.Json.JsonIgnore]”用于在序列化过程中忽略常量属性,但“[System.Text.Json.serialization.JsonIgnore]”不起作用。我想知道附近是否有工作 所以我尝试着从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
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; }