XML序列化.net decimal始终包含两位有效数字

时间:2016-05-16 19:23:28

标签: c# .net xml serialization xml-serialization

我试图调用一个SOAP服务,据信是用Java编写的,它以十进制为值。该合同由.NET 4.6.1 System.ServiceModel生成。对于被调用的服务有些奇怪,有必要发送10.00 vs 10.0。我能够将“10.00”作为字符串发送,但是如果需要重新生成则不想修改合同。合同是一个公共的部分类,我实现了从IXmlSerializable部分继承,其中十进制转换为带有两个小数位的字符串。但是,通过此代码运行测试时会生成以下错误:

  

...   “exceptionMessage \\”:\\“只能为其指定XmlRoot属性   MyPainfulClass类型。请使用XmlSchemaProviderAttribute   指定架构   输入\\ “\\ ”exceptionType \\“:\\ ”System.InvalidOperationException \\“,\\ ”堆栈跟踪\\“:\\”   在   System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel   model,String ns,ImportContext context,String dataType,   XmlAttributes a,Boolean repeats,Boolean openModel,RecursionLimiter   限制器)\\ “}}}}}}}}}}}}}} \”}“

这似乎是John在this post中推荐的解决方案。

我确实使用XmlSchemaProviderAttribute修饰了扩展类,但我不确定我是否引用了正确的.xsd作为服务相当纠结。是否有更好的方法来为模式生成的类进行deffer?我的最终目标是简单地将XML序列化覆盖为字符串。

namespace PainfulService.Contract
{
    using System;
    using System.Xml;
    using System.Xml.Schema;
    using System.Xml.Serialization;

    [XmlSchemaProviderAttribute("http://painfulservice.com/headache/v1_01.xsd")]
    public partial class MyPainfulClass : IXmlSerializable
    {
        [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
        public string PriceAsString
        {
            get
            {
                return this.priceField.ToString("0.00");
            }
        }

        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
            Price = decimal.Parse(element.XPathSelectElement("PriceAsString").Value);
        }

        public void WriteXml(XmlWriter writer)
        {
            writer.WriteElementString("Price", PriceAsString);
        }
    }
}

0 个答案:

没有答案