我不得不从xsd文件生成一些类。使用xml序列化注释正确生成了类和属性。问题在于类的十进制属性是使用Newtonsoft.Json序列化的。我只想序列化正确填充的十进制属性。金额是SaleMessage的一部分 例如:
class Amount
{
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal RequestedAmount;
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal CashBackAmount;
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal TipAmount;
}
//Usage
var amount = new Amount()
{
RequestedAmount = 12.0
}
使用此结构,它将始终序列化所有属性
像这样
{"RequestedAmount":12.0,"CashBackAmount":0.0,"TipAmount":0.0}
这不是预期的行为。
问题是如何修改序列化以不解析未设置的属性
static string Serialize(SaleMessage saleMessage)
{
var serialize= JsonConvert.SerializeObject(saleToPoiMessage,
new StringEnumConverter(),
new IsoDateTimeConverter() { DateTimeFormat = DateTimeFormat });
return serialize;
}
我们将不胜感激:)
答案 0 :(得分:0)
由于其类型为decimal
原语,因此默认情况下将具有某些值。我认为您需要自己实现序列化工具Newtonsoft.Json使用。不包含十进制值0.0的位置(如果这适合业务逻辑)。
另一个选择是不使用原始类,然后设置在序列化时删除null
值的属性。我相信您可以在Newtonsoft中设置此配置参数。
检查以下内容:https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm
答案 1 :(得分:0)
您可以将DefaultValueHandling
设置设为Ignore
,以禁止序列化等于其默认值的值。
var settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter>
{
new StringEnumConverter(),
new IsoDateTimeConverter() { DateTimeFormat = DateTimeFormat }
},
DefaultValueHandling = DefaultValueHandling.Ignore
};
var json = JsonConvert.SerializeObject(saleMessage, settings);
答案 2 :(得分:0)
就我而言,我将原始类型更改为可为空。
stop_node
这对我有用。我更喜欢@Brian Rogers的答案。 :)