Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 将多个对象写入/读取到Xml C中#_C#_.net_Xml - Fatal编程技术网

C# 将多个对象写入/读取到Xml C中#

C# 将多个对象写入/读取到Xml C中#,c#,.net,xml,C#,.net,Xml,我是Xml新手,已经编写了创建Xml并将其读回的代码。 但是我想对Xml结构进行一些修改 我不想要的是ArrayOfMovie标签,它作为根标签出现。 但当我将多个对象写入Xml时,它会显示一个ArrayOfMovie标记。因为我必须维护类的结构,上面的标签是Movie,然后是它的细节,然后是其他Movie。另外,如果您告诉代码修改xml,请告诉过程也读取新结构的xml 以下是该场景的代码: // Movies class which contains the list of Movie obj

我是Xml新手,已经编写了创建Xml并将其读回的代码。 但是我想对Xml结构进行一些修改

我不想要的是ArrayOfMovie标签,它作为根标签出现。 但当我将多个对象写入Xml时,它会显示一个ArrayOfMovie标记。因为我必须维护类的结构,上面的标签是Movie,然后是它的细节,然后是其他Movie。另外,如果您告诉代码修改xml,请告诉过程也读取新结构的xml

以下是该场景的代码:

// Movies class which contains the list of Movie objects
 public class Movies
    {
     public List<Movie> movieList = new List<Movie>();

    }

  //Movie class
  public class Movie
    {

        public string Title
        { get; set; }


        public int Rating
        { get; set; }


        public DateTime ReleaseDate
        { get; set; }

    }

    private void CreateXml_Click(object sender, EventArgs e)
    {
        string filePath = path + textBox_XmlFileName.Text+".xml";

        Movie firstMov = new Movie();
        firstMov.Title = "Shrek";
        firstMov.Rating = 2;
        firstMov.ReleaseDate = DateTime.Now;

        Movie secondMov = new Movie();
        secondMov.Title = "Spider Man";
        secondMov.Rating = 4;
        secondMov.ReleaseDate = DateTime.Now;

        Movies moviesObj = new Movies();
        moviesObj.movieList.Add(firstMov);
        moviesObj.movieList.Add(secondMov);
        List<Movie> movList = new List<Movie>() { firstMov,secondMov};

        XmlHandler.SerializeToXml(moviesObj.movieList, filePath);

    }

// The static class and funcion that creates the xml file 
       public static void SerializeToXml(List<Movie> movies ,string filePath)
       {
          XmlSerializer xls= new XmlSerializer(typeof(List<Movie>)); 

       TextWriter tw = new StreamWriter(filePath);
       xls.Serialize(tw, movies);
       tw.Close();
       }
//包含电影对象列表的电影类
公共级电影
{
public List movieList=新列表();
}
//电影课
公映
{
公共字符串标题
{get;set;}
公共整数评级
{get;set;}
公共日期时间发布日期
{get;set;}
}
私有void CreateXml_单击(对象发送方,事件参数e)
{
字符串filePath=path+textBox\u XmlFileName.Text+“.xml”;
Movie firstMov=新电影();
firstMov.Title=“史莱克”;
首次移动额定值=2;
firstMov.ReleaseDate=DateTime.Now;
Movie secondMov=新电影();
第二个mov.Title=“蜘蛛侠”;
二次移动额定值=4;
secondMov.ReleaseDate=DateTime.Now;
Movies moviesObj=新电影();
moviesObj.movieList.Add(firstMov);
moviesObj.movieList.Add(第二个mov);
List movList=new List(){firstMov,secondMov};
SerializeToXml(moviesObj.movieList,filePath);
}
//创建xml文件的静态类和函数
公共静态XML(列出电影、字符串文件路径)
{
XmlSerializer xls=新的XmlSerializer(typeof(List));
TextWriter tw=新的StreamWriter(文件路径);
xls.连载(tw,电影);
tw.Close();
}
//它创建以下输出

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMovie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Movie>
    <Title>Shrek</Title>
    <Rating>2</Rating>
    <ReleaseDate>2014-05-25T22:55:17.2811063+05:00</ReleaseDate>
  </Movie>
  <Movie>
    <Title>Spider Man</Title>
    <Rating>4</Rating>
    <ReleaseDate>2014-05-25T22:55:17.2811063+05:00</ReleaseDate>
  </Movie>
</ArrayOfMovie>

史莱克
2.
2014-05-25T22:55:17.2811063+05:00
蜘蛛侠
4.
2014-05-25T22:55:17.2811063+05:00
//将文件读入对象的代码

  public static List<Movie> DeserializeFromXml(string filePath)
   {
       XmlSerializer deserializer = new XmlSerializer(typeof(List<Movie>));
       TextReader tr = new StreamReader(@filePath);
       List<Movie> movie;
       movie = (List<Movie>)deserializer.Deserialize(tr);
       tr.Close();

       return movie;
   }
公共静态列表反序列化FromXML(字符串文件路径)
{
XmlSerializer反序列化器=新的XmlSerializer(typeof(List));
TextReader tr=新的StreamReader(@filePath);
列出电影;
电影=(列表)反序列化程序;
tr.Close();
回归电影;
}

如果要命名根,可以使用XmlRootAttribute

XmlSerializer deserializer = new XmlSerializer(typeof(List<Movie>), 
new XmlRootAttribute("YourRoot"));
XmlSerializer反序列化程序=新的XmlSerializer(typeof(List),
新的XmlRootAttribute(“YourRoot”);

XML文档只有一个根元素。试图创建一个包含多个根元素的XML文档将使使用这种不一致的XML文档成为一种负担。你为什么要这么做?我想去掉ArrayOfMovies标签。创建的其余部分很好。而且还想重新加载。那么,你到底为什么要删除ArrayOfMovies标签呢?这只会使反序列化变得比必要的更复杂。这就是要求。我还尝试迭代列表并在其中添加每一部电影,但每次它都会根据电影标记添加新xml的名称空间。您的问题意味着您(或者更确切地说您的代码)负责序列化和反序列化。如果您必须使用提供或使用格式错误的XML的第三方软件,我会理解这一要求,但这里的情况似乎并非如此。因此,我真诚地建议您挑战这个似乎基于糟糕的设计决策的需求。但这不会是通用的!我想删除ArrayOfMovie标签,结构的其余部分很好,我也想把它读回来。