1

サンプルXml:

<TestXML>
   <TestDecimal attr1="Required" attr2="false">0.34</TestDecimal>
   <TestInteger attr1="MyAttr" attr2="1" DateAdded="">25</TestInteger>
</TestXML>

クラス定義:

public class TestXML {
   public DecimalValue TestDecimal;
   public IntegerValue TestInteger;
}

public class IntegerValue {
   [XmlText]
   public int value {get; set;}
   [XmlAnyAttribute]
   public XmlAttribute[] XAttributes {get; set;}
}
public class DecimalValue {
   [XmlText]
   public decimal value {get; set;}
   [XmlAnyAttribute]
   public XmlAttribute[] XAttributes {get; set;}
}

デシリアライズするコード:

XmlSerializer serializer = new XmlSerializer(typeof(TestXML));
using (FileStream fs = new FileStream(@"C:\Test.xml", FileMode.Open)) {
   TestXML myxml = (TestXML)serializer.Deserialize(fs);
}

これをテストすると、整数値が返されますが、10進値は返されません。

myxml
   TestDecimal
      value |  0
      XAttributes  {string[2]}
         [0] Name="attr1", Value="Required"
         [1] Name="attr2", Value="false"
   TestInteger
      value |  25
      XAttributes  {string[3]}
         [0] Name="attr1", Value="MyAttr"
         [1] Name="attr2", Value="1"
         [2] Name="DateAdded", Value=""

小数の逆シリアル化について、0として返されるようなものはありますか?プリミティブ型の10進数では、10進数値が正常に返されます。

4

1 に答える 1

2

実際のコードでは、ここに表示されているものとは異なることをしている必要があります。あなたのコードは投稿されたとおりにコンパイルされません。具体的には、C# でクラス定義の名前の後に () がありません。

これは期待どおりに機能します(10進数値は正しく逆シリアル化されます):

using System;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace Test
{

    public class TestXML
    {
        public DecimalValue TestDecimal;
        public IntegerValue TestInteger;
    }

    public class IntegerValue
    {
        [XmlText]
        public int value {get; set;}
        [XmlAnyAttribute]
        public XmlAttribute[] XAttributes {get; set;}
    }

    public class DecimalValue
    {
        [XmlText]
        public decimal value {get; set;}
        [XmlAnyAttribute]
        public XmlAttribute[] XAttributes {get; set;}
    }

    class Program
    {

        static void Test()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(TestXML));
            using (FileStream fs = new FileStream("Test.xml", FileMode.Open)) 
            {
                TestXML myxml = (TestXML)serializer.Deserialize(fs);
            }

        }

        static void Main(string[] args)
        {
            Test();
        }
    }
}

これは、次のデータを含む bin ディレクトリにコピーされたローカルの test.xml ファイルを使用しています。

<TestXML>
    <TestDecimal attr1="Required" attr2="false">0.34</TestDecimal>
    <TestInteger attr1="MyAttr" attr2="1" DateAdded="">25</TestInteger>
</TestXML>
于 2013-01-10T18:09:10.623 に答える