C# - 序列化列表有效,但反序列化返回空列表

时间:2017-12-07 09:20:28

标签: c# serialization

我在C#中使用XML反序列化存在一个奇怪的问题。序列化对象按预期工作,但反序列化使列表值属性Files为空。

using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Text;

namespace Converter
{
   [Serializable]
   [XmlRoot("userinput")]
   public class Input
   {

      [XmlArray("files")]
      [XmlArrayItem(Type = typeof(FilePair), ElementName = "filepair")]
      public List<FilePair> Files;


      public Input()
      { }

   }
}

和元素:

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Converter
{
   [Serializable]
    public class FilePair
    {
        [XmlElement("file1")]
        public string File1;

        [XmlElement("file2")]
        public string File2;

        public FilePair() { }

    }

    public enum FileSource { Foo, Bar };
}

和示例XML:

<userinput>
   <files>
      <filepair>
         <file1>foo</file1>
         <file2>bar</file2>
      </filepair>
      <filepair>
         <file1>foo</file1>
         <file2>bar</file2>
      </filepair>
   </files>
</userinput>

1 个答案:

答案 0 :(得分:0)

如果我接受您的代码,请修复[XmlElement("file2")],并使用:

    var xml = @"<userinput>
<files>
  <filepair>
     <file1>foo</file1>
     <file2>bar</file2>
  </filepair>
  <filepair>
     <file1>foo</file1>
     <file2>bar</file2>
  </filepair>
</files>
</userinput>";
    using (var reader = new StringReader(xml))
    {
        var obj = (Input)new XmlSerializer(typeof(Input)).Deserialize(reader);
        foreach(var file in obj.Files)
        {
            Console.WriteLine($"{file.File1}, {file.File2}");
        }
    }

然后:它有效。输出是:

foo, bar
foo, bar

所以:无论问题是什么:你在创建最小样本时已经修复了它。

所以现在问题变成了:你的最小样本和真实代码之间有什么不同?回答这个问题,并且您将自己回答这个问题。