【发布时间】:2020-03-04 15:51:41
【问题描述】:
我正在尝试从 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;
}
}
到;
using System.Text.Json.Serialization;
public class MyClass: MyBaseClass
{
[JsonIgnore] // Error
public const string MyConstString = "lets get rid of netwonsoft dependency";
public string data;
public String(string data)
{
this.data = data;
}
}
错误描述是; “属性 'JsonIgnore' 在此声明类型上无效。它仅在 'property, indexer' 声明上有效。”
是因为 System.Text.Json 不支持这样使用 JsonIgnore,还是我遗漏了什么? 关于这个问题,我在link 上找不到任何有用的信息。你有什么想法吗?
【问题讨论】:
-
属性声明通常有一个 getter 和/或一个 setter。可以试试改成
public string MyConstString { get; } = "your string"; -
System.Text.Json无论如何都不会序列化const,这里不需要该属性。 -
事实上,Newtonsoft 也不会,不清楚为什么你的
const首先有这个属性? -
也许你遇到的一个更大的问题是新的序列化器不会序列化字段,这意味着你需要将它们更改为属性。
-
Newtonsoft 将仅在您使用
[JsonProperty]属性明确标记它们时序列化const值。
标签: c# json json.net system.text.json