Мы подключаемся к внешней системе, которая предоставляет WSDL, который ожидает, что десятичные дроби будут предоставлены с двумя десятичными знаками, то есть:
<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 таким образом?