gpt4 book ai didi

c# - Json.net getter 属性未序列化

转载 作者:太空狗 更新时间:2023-10-29 20:51:48 25 4
gpt4 key购买 nike

我已经开始使用 json.net 来生成更好的 DateTimes,但我注意到我的一个属性没有被序列化。它没有 setter,它的 getter 依赖于对象的另一个成员,例如

public int AmountInPence { get; set;}
public decimal AmountInPounds { get { return (decimal)AmountInPence / 100; } }

我做了一个继承自JsonResult的类,主线是:

string serializedObject = JsonConvert.SerializeObject(Data, new IsoDateTimeConverter());

谁能告诉我如何强制它序列化该属性?

编辑:只是为了澄清 - 这是一个简化的例子。我更新了它以反射(reflect)我首先将 int 转换为 decimal。我之前忘记检查过,但该属性是部分类的一部分,因为它是从 WCF 服务返回的。我在我的程序集中声明了该属性,这可能是一个线索吗?

最佳答案

Json.net 没有任何问题。它可以很好地序列化只读属性。问题出在您的 AmountInPounds

public decimal AmountInPounds { get { return AmountInPence / 100;  } }

因为您正在用 /100 进行整数除法,这意味着如果 AmountInPence 小于 100,您将得到 0

您需要的是使用 m suffix将 100 标记为 decimal:

public decimal AmountInPounds { get { return AmountInPence / 100m;  } }

AmountInPounds 中得到正确的结果。

评论后编辑:

计算属性 AmountInPounds 是 WCF 服务生成的 DataContract部分类

并且在 DataContract 中,如果一个属性没有用 DataMemberAttribute 标记,它似乎不会被序列化。

所以除了 OP 的回答:

[JsonPropertyAttribute(DefaultValueHandling = DefaultValueHandling.Include)]
public decimal AmountInPounds { get { return (decimal)AmountInPence / 100; } }

这也是可行的:

[System.Runtime.Serialization.DataMemberAttribute()]
public decimal AmountInPounds { get { return (decimal)AmountInPence / 100; } }

关于c# - Json.net getter 属性未序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9727836/

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