0

如何使用 XmlSerializer 创建这样的结构:

<Files Upload="True">
    <InputFiles>
        <InputFile File="file.txt" ErrorCode="0" Version="0"/>
        <InputFile File="file.txt" ErrorCode="0" Version="0"/>
    </InputFiles>
    <OutputFiles>
        <OutputFile File="file.txt" ErrorCode="0" Version="0"/>
        <OutputFile File="file.txt" ErrorCode="0" Version="0"/>
    </OutputFiles>
</Files>

问题是创建标签文件

现在我在某个类中有这样的代码,这些代码正在为输入文件和输出文件序列化:

    private System.Collections.Generic.List<InputFile> _inputFiles = new System.Collections.Generic.List<InputFile>();
    [XmlIgnore]
    public virtual System.Collections.Generic.List<InputFile> InputFiles
    {
        get 
        {
            if (ModulesInBuild.ModulesList.Count != 0)
            {
                _inputFiles.Clear();
                foreach (var item in ModulesInBuild.ModulesList)
                {
                    _inputFiles.Add(item);
                }
            }
            return _inputFiles; 
        }
    }

    [XmlArray("InputFiles")]
    [XmlArrayItem("InputFile")]
    public virtual InputFile[] XmlInputFiles
    {
        get
        {
            var inputFiles = new InputFile[InputFiles.Count];
            InputFiles.CopyTo(inputFiles, 0);
            return inputFiles;
        }
        set
        {
            InputFiles.Clear();
            InputFiles.AddRange(value);
        }
    }

所以最好不要重写很多代码而只是添加标签文件=)

4

2 回答 2

0

您可以执行类似的操作,然后使用 XmlSerializer 对其进行序列化。

对 InputFile 和 OutputFile 类中的属性也使用 XmlAttribute 属性。

 [Serializable]   
 public class Files
    {
        public Files(){}

        [XmlAttribute()]
        public bool Upload{get;set;}

        public List<InputFile> InputFiles
           {
           get{retrun inputFiles;}
           set{inputFiles=value;}
           }
        List<InputFile> inputFiles = new List<InputFile>();

        public List<OutputFile > OutputFiles
           {
           get{return outputFiles ;}
           set{outputFiles =value;}
           }
        List<OutputFile > outputFiles = new List<OutputFile >();
    }
于 2013-04-16T11:38:09.997 回答
0

有多种方法可以解决这个问题。就个人而言,我更喜欢添加新的父类,您可以在其中添加InputFileOutputFile列表。但是,如果你不喜欢这个想法,你可以做另外两件事之一:

  1. 自己实施IXmlSerializable和处理事情
  2. 对于快速而肮脏的黑客攻击,您可以执行以下操作:

string serialized = //however you normally serialize your xml

string uglyHack = "<Files>" + serialized + "</Files>";

我不推荐最后一种方法,但无论你的船漂浮什么......

于 2013-04-16T12:14:17.593 回答