Kyl*_*Mit 13 c# serialization json .net-core system.text.json
我可以使用动态忽略密封类中的属性吗System.Text.Json.JsonSerializer?
来自另一个库的示例类:
public sealed class FrozenClass
{
// [JsonIgnore] <- cannot apply because I don't own this class
public int InternalId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
默认序列化:
var person = new FrozenClass() { InternalId = 3, FirstName = "Dorothy", LastName = "Vaughan" };
var jsonString = System.Text.Json.JsonSerializer.Serialize(person);
Run Code Online (Sandbox Code Playgroud)
实际结果:
{ "InternalId": 3, "FirstName": "Dorothy", "LastName": "Vaughan" }
Run Code Online (Sandbox Code Playgroud)
预期结果:
{ "FirstName": "Dorothy", "LastName": "Vaughan" }
Run Code Online (Sandbox Code Playgroud)
还有另外两个问题是关于如何在运行时添加 JsonIgnore和添加动态属性名称进行序列化,但这两个问题都是针对Newtonsoft 的 Json.NET - 并且经常引用此扩展方法
有多种方法可以修改类与 native 的序列化方式JsonSerializer,但似乎都依赖于修改底层类:
[JsonIgnore][JsonConverter]但是,就我而言,该类来自另一个库,无法扩展
一种可能的解决方法是创建另一个可导出类并在它们之间设置一个映射器
public class MyFrozenClass
{
public MyFrozenClass(FrozenClass frozen)
{
this.FirstName = frozen.FirstName;
this.LastName = frozen.LastName;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
var jsonString = System.Text.Json.JsonSerializer.Serialize(new MyFrozenClass(person));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4119 次 |
| 最近记录: |