C# 对象序列化之序列化为Json文件(二)

本文接着上一篇补充几个问题

1 序列化派生类的属性

不支持多态类型层次结构的序列化。 例如,如果属性定义为接口或抽象类,则即使运行时类型具有其他属性,也只会序列化对接口或抽象类定义的属性。 此部分中介绍了此行为的例外情况。

例如,假设有一个 WeatherForecast 类和一个派生类 WeatherForecastDerived

public class WeatherForecast
{
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    public string Summary { get; set; }
}
public class WeatherForecastDerived : WeatherForecast
{
    public int WindSpeed { get; set; }
}

并且假设 Serialize 方法的类型参数在编译时为 WeatherForecast

var options = new JsonSerializerOptions
{
    WriteIndented = true
};
jsonString = JsonSerializer.Serialize<WeatherForecast>(weatherForecast, options);

在这种情况下,即使 weatherForecast 对象实际上是 WeatherForecastDerived 对象,也不会序列化 WindSpeed 属性。 仅序列化基类属性:

{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot"
}

此行为旨在帮助防止在运行时创建的派生类型中发生意外数据泄露。

若要序列化前面示例中派生类型的属性,请使用以下方法之一:

options = new JsonSerializerOptions
{
    WriteIndented = true
};
jsonString = JsonSerializer.Serialize(weatherForecast, weatherForecast.GetType(), options);

将要序列化的对象声明为 object

options = new JsonSerializerOptions
{
    WriteIndented = true
};
jsonString = JsonSerializer.Serialize<object>(weatherForecast, options);

在前面的示例方案中,这两种方法都会使 WindSpeed 属性包含在 JSON 输出中:

{
  "WindSpeed": 35,
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot"
}

更多详情请看官网


 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值