Ber*_*kal 6 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 const string MyConstString = "lets get rid of netwonsoft dependency";
public string data;
public String(string data)
{
this.data = data;
}
}
Run Code Online (Sandbox Code Playgroud)
到;
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;
}
}
Run Code Online (Sandbox Code Playgroud)
错误描述是; “属性‘JsonIgnore’在此声明类型上无效。它仅在‘属性,索引器’声明上有效。”
是因为 System.Text.Json 不支持 JsonIgnore 的这种使用,还是我遗漏了一些东西?我在此链接上找不到有关此问题的任何有用信息。你有什么想法吗?
JSON.Net[JsonIgnore]属性的用法设置为AttributeTargets.Property | AttributeTargets.Field意味着它可以在const. 但是,新的 .NET Core API 版本[JsonIgnore]设置为AttributeTargets.Propertyonly。这意味着您只能在房产上使用它。
话虽如此,JSON.Net 不会序列化const值,除非您明确告诉它使用[JsonProperty]属性进行序列化,这使得添加另一个属性来忽略它有点奇怪。
例如,JSON.Net 会将您问题中的类序列化为:
{"data":"foo"}
Run Code Online (Sandbox Code Playgroud)
而序列化器System.Text.Json会给你这个:
{}
Run Code Online (Sandbox Code Playgroud)
所以另一个问题是新的 API 不序列化fields。由此得出的结论是,您应该使用现代 C# 技术,这意味着使用属性,例如:
public string data { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |