XmlSerialization.为两个类创建公共根
本文关键字:创建 两个 XmlSerialization | 更新日期: 2023-09-27 18:09:30
如何使用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);
}
}
所以不需要重写很多代码,只需要添加标签Files =)
您可以这样做,然后使用XmlSerializer序列化它。
为InputFile和OutputFile类中的属性也使用xmlatattribute。
[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 >();
}
有多种方法可以做到这一点。就我个人而言,我更喜欢添加新的父类,您可以向其添加InputFile
和OutputFile
列表。然而,如果你不喜欢这个想法,你可以做其他两件事之一:
- 实现
IXmlSerializable
并自己处理 对于一个快速而肮脏的hack,你可以这样做:
string serialized = //however you normally serialize your xml
string uglyHack = "<Files>" + serialized + "</Files>";
我不推荐最后一种方法,但是随你的便