【问题标题】:.Net Xml serialization appending negative sign to 0.Net Xml 序列化将负号附加到 0
【发布时间】:2022-01-20 08:46:11
【问题描述】:

我正在尝试序列化具有双值类型属性但输出 xml 的参数值为“-0”的对象。 我正在使用 .Net 框架 3.5。

示例代码:

[Serializable]
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
Public class Data
{
  [XmlElement(Form = XmlSchemaForm.Unqualified)]
  public double Lateral { get; set;}
}

public class Test
{
   Public static void Main()
   {
       Test t=new Test();
       
       Data data=new Data();
       data.Lateral=0;
       string xml = t.ToXml(data);
       Console.WriteLine(xml);

   }
     Public string ToXml(Data data)
     {
         using (StringWriter stringWriter = new StringWriter())
         {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Data));
            xmlSerializer.Serialize(stringWriter, data);
            return stringWriter.ToString();
         }
     }
   }
}

Output xml:
<?xml version="1.0" encoding="utf-16"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Lateral>-0</Lateral>
</Data>

【问题讨论】:

  • 你测试过更新的框架吗?
  • @Jimi 我已经尝试过最近的框架,价值没有负号。
  • 我们的应用程序限制升级到最新的框架。于是在.net3.5框架中寻找解决方案。
  • 您真的需要序列化为 XML,或者 JSON 可以吗? Json.Net 没有针对 .Net Framework 3.5 的依赖项。
  • 如果数据驻留在 SQL Server 数据库中,您可以轻松地在数据库层创建 XML。

标签: c# xml .net-3.5 xmlserializer


【解决方案1】:

有时会发生双0。你可以尝试一个非常简单的技巧

public class Data
{
    private double _lateral;

    public double Lateral
    {
        get { return _lateral + 0 ; }
        set { _lateral = value; }
    }

     //or
     public double Lateral
    {
        get { return _lateral; }
        set { _lateral = value + 0 ; }
    }
}

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 2011-10-05
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多