В Json.net нет ничего плохого. Он может сериализовать свойства только для чтения.
Проблема в вашем AmountInPounds
public decimal AmountInPounds { get { return AmountInPence / 100; } }
Поскольку вы делаете целочисленное деление с / 100
, это означает, что вы получите 0
, если AmountInPence
меньше 100.
Вам нужно использовать суффикс m , чтобы пометить 100 как decimal
:
public decimal AmountInPounds { get { return AmountInPence / 100m; } }
чтобы получить правильный результат в AmountInPounds
.
РЕДАКТИРОВАТЬ после комментариев:
Расчетное свойство AmountInPounds
было в частичном классе сгенерированной службы WCF DataContract
.
А в DataContract
, если свойство не помечено DataMemberAttribute
, похоже, оно не будет сериализовано.
Итак, кроме ответа ОП:
[JsonPropertyAttribute(DefaultValueHandling = DefaultValueHandling.Include)]
public decimal AmountInPounds { get { return (decimal)AmountInPence / 100; } }
Это тоже работает:
[System.Runtime.Serialization.DataMemberAttribute()]
public decimal AmountInPounds { get { return (decimal)AmountInPence / 100; } }