C# XmlSerialization。为两个类创建公共根
如何使用XmlSerializer创建这样的结构:C# XmlSerialization。为两个类创建公共根,c#,xml,xml-serialization,xmlserializer,C#,Xml,Xml Serialization,Xmlserializer,如何使用XmlSerializer创建这样的结构: <Files Upload="True"> <InputFiles> <InputFile File="file.txt" ErrorCode="0" Version="0"/> <InputFile File="file.txt" ErrorCode="0" Version="0"/> </InputFiles> <Out
<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>
问题是如何创建标记文件
现在我在某个类中有这样的代码,该类正在为inputfiles和outputfiles序列化:
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);
}
}
private System.Collections.Generic.List _inputFiles=new System.Collections.Generic.List();
[XmlIgnore]
公共虚拟系统.Collections.Generic.List输入文件
{
得到
{
if(ModulesInBuild.ModulesList.Count!=0)
{
_inputFiles.Clear();
foreach(ModulesInBuild.ModulesList中的变量项)
{
_输入文件。添加(项);
}
}
返回输入文件;
}
}
[XmlArray(“InputFiles”)]
[XmlArrayItem(“输入文件”)]
公共虚拟输入文件[]XmlInputFiles
{
得到
{
var inputFiles=new InputFile[inputFiles.Count];
CopyTo(InputFiles,0);
返回输入文件;
}
设置
{
InputFiles.Clear();
InputFiles.AddRange(值);
}
}
因此,最好不要重写太多代码,而只是添加标记文件=)您可以这样做,然后使用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 >();
}
[可序列化]
公共类文件
{
公共文件(){}
[XmlAttribute()]
公共bool上传{get;set;}
公共列表输入文件
{
获取{retrun inputFiles;}
设置{inputFiles=value;}
}
List inputFiles=新列表();
公共列表输出文件
{
获取{return outputFiles;}
设置{outputFiles=value;}
}
List outputFiles=新列表();
}
有多种方法可以做到这一点。就我个人而言,我更喜欢添加新的父类,您可以在其中添加InputFile
和OutputFile
列表。但是,如果你不喜欢这个想法,你可以做另外两件事:
IXmlSerializable
并自己处理事情string serialized=//但是您通常会序列化xml
string uglyHack=”“+序列化+”代码>
我不推荐最后一种方法,但无论什么方法能让你的船漂浮起来。我对我的帖子做了一些更新,请看一下好吗?可能还有其他方法可以创建新类?如果您想序列化属性,[XmlIgnore]不是正确的方法。它输入错误)没有XmlIgnore(真的)这段代码工作正常,但我不知道如何将InputFile放入标记文件中。您在说的标记文件是什么?我的意思是属性,然后你可以在InputFile类中使用XmlAttribute属性,正如我所说的。我说的是“文件”来包围InputFile和OutputFile。您的代码是正确的,但要实现它,我必须创建一个新类,但我不能这样做。