【发布时间】:2020-02-05 21:38:26
【问题描述】:
我们正在连接到一个提供 WSDL 的外部系统,该系统期望将小数提供到小数点后 2 位 - 即:
<collectionAmount>1000.00</collectionAmount>
但是,当我们的客户端序列化 SOAP 请求时,小数点以单精度显示:
<collectionAmount>1000.0</collectionAmount>
我们已尝试使用元数据扩展:
[MetadataType(typeof(amountSetRequestMetadata))]
public partial class amountSetRequest
{
internal sealed class amountSetRequestMetadata
{
[XmlIgnore]
public decimal collectionAmount { get; set; }
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 14, ElementName = "collectionAmount")]
public string collectionAmountString => "yay!";
}
}
amountSetRequest 是 WSDL 服务自动生成器生成的部分类。输出 XML 没有什么不同,因此这似乎对请求没有任何影响。
我们认为这是相当普遍的,但无法找到解决方法。我们已经看到了扩展基本 XML 序列化程序的解决方案。
以这种方式序列化 SOAP 请求的最简洁的方法是什么?
【问题讨论】:
-
显然,对于 XML 本身,有一种方法可以在 XML 配置文件中指定它。见this。但是,很难在谷歌上搜索相关信息,因为谷歌总是认为你在谈论一个常规的配置文件,存储为 XML,而不是 XML 格式本身的配置。所以我无法弄清楚这是否/如何应用于 SOAP 消息。祝你好运!
-
你需要像 ToString("F2") 这样的数字格式
-
@jdweng 是的,那将是理想的 - 但是 - 合同接受
decimal而不是string所以内部 XML 序列化没有正确转换它。问题是如何让它按照预期进行序列化?
标签: c# wcf soap code-generation partial-classes