Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSerialization。为两个类创建公共根_C#_Xml_Xml Serialization_Xmlserializer - Fatal编程技术网

C# XmlSerialization。为两个类创建公共根

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

如何使用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>

问题是如何创建标记文件

现在我在某个类中有这样的代码,该类正在为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。您的代码是正确的,但要实现它,我必须创建一个新类,但我不能这样做。