gpt4 book ai didi

.net - 反序列化时缺少 JSON.Net 构造函数参数

转载 作者:行者123 更新时间:2023-12-01 10:49:40 24 4
gpt4 key购买 nike

我有一个简单的对象,我通过 JSON 进行往返。它序列化得很好,但我将它反序列化,其中一个值设置为默认值(在这种特殊情况下为 0)。这是为什么?

这是我的对象:

public class CurrencyExchangeRate
{
public string CurrencyCode { get; private set; }
public decimal Rate { get; private set; }

public CurrencyExchangeRate(string currencyCode, decimal exchangeRate)
{
this.CurrencyCode = currencyCode;
this.Rate = exchangeRate;
}
}

这会序列化为 JSON,如 {"CurrencyCode":"USD", "Rate": 1.10231}。但是当我反序列化它时,Rate 字段总是设置为 0CurrencyCode 字段设置正确,因此显然反序列化并没有完全失败,只是一个字段失败了。

最佳答案

构造函数参数命名错误。

因为没有无参数的构造函数,JSON.net 被迫使用带参数的构造函数并为这些参数提供值。它会尝试通过比较名称来将 JSON 字符串中的字段与构造函数的参数相匹配。这适用于货币代码,因为 CurrencyCodecurrencyCode 足够接近。但是 JSON 字段名 Rate 与构造函数参数 exchangeRate 相差太大,因此 JSON.net 无法判断它们是一回事。因此它传递了该类型的默认值,在本例中为 0m。将构造函数参数名称更改为类似 rate 的名称将解决此问题。

public class CurrencyExchangeRate
{
public string CurrencyCode { get; private set; }
public decimal Rate { get; private set; }

//NOTE changed parameter name!
public CurrencyExchangeRate(string currencyCode, decimal rate)
{
this.CurrencyCode = currencyCode;
this.Rate = rate;
}
}

关于.net - 反序列化时缺少 JSON.Net 构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21733792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com