Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Xml_Serialization_Deserialization - Fatal编程技术网

C#XML序列化/反序列化

C#XML序列化/反序列化,c#,.net,xml,serialization,deserialization,C#,.net,Xml,Serialization,Deserialization,我是C#的新手。我现在正在上一门课,我们的一个课堂示例无法编译。VisualStudio2010给了我这个错误:XML文档中有一个错误(3,2) 我应该如何编辑XML文件以使其与代码一起工作 谢谢你的帮助 public class SerializeIn { public static void Main() { // Declarations. Person[] p = new Person[0]; string infile =

我是C#的新手。我现在正在上一门课,我们的一个课堂示例无法编译。VisualStudio2010给了我这个错误:XML文档中有一个错误(3,2)

我应该如何编辑XML文件以使其与代码一起工作

谢谢你的帮助

public class SerializeIn
{
    public static void Main()
    {
        // Declarations.
        Person[] p = new Person[0];
        string infile = "Persons.xml";
        StreamReader sr = new StreamReader(infile);
        XmlSerializer xs = new XmlSerializer(p.GetType());

        // Deserialize Person object from disc.
        p = (Person[])(xs.Deserialize(sr));

        // Close StreamReader object to be safe.
        sr.Close();

        // Write what happened.
        Console.WriteLine("Deserialized array p from output file " +
            infile + ".");

        // Print array.
        foreach(Person x in p)
            Console.WriteLine(x);

        Console.ReadLine();
    }
}
使用制度; 命名空间XmlArraySerialize { /// ///XmlArraySerialize示例:序列化和反序列化 ///一群人。 ///

}

和XML文件

<?xml version="1.0" standalone="no"?>
<!--Created by ToXml Example in IO-->
<Persons>
    <Person ID="1001">
        <Name>Susan</Name>
        <Gender>F</Gender>
        <Age>21</Age>
    </Person>
    <Person ID="1002">
        <Name>Michael</Name>
        <Gender>M</Gender>
        <Age>25</Age>
    </Person>
    <Person ID="1003">
        <Name>Judy</Name>
        <Gender>F</Gender>
        <Age>31</Age>
    </Person>
    <Person ID="1004">
        <Name>Chloe</Name>
        <Gender>F</Gender>
        <Age>27</Age>
    </Person>
    <Person ID="1005">
        <Name>Scott</Name>
        <Gender>M</Gender>
        <Age>58</Age>
    </Person>
    <Person ID="1006">
        <Name>William</Name>
        <Gender>M</Gender>
        <Age>41</Age>
    </Person>
    <Person ID="1007">
        <Name>Mary</Name>
        <Gender>F</Gender>
        <Age>30</Age>
    </Person>
</Persons>

苏珊
F
21
迈克尔
M
25
朱迪
F
31
克洛伊
F
27
斯科特
M
58
威廉
M
41
玛丽
F
30
这应该可以)

类程序
{
静态void Main(字符串[]参数)
{   
常量字符串infle=“x:\\Persons.xml”;
人员p;
使用(var sr=新的StreamReader(内嵌))
{
var xs=新的XmlSerializer(p.GetType());
p=(人)(xs.反序列化(sr));
}
WriteLine(“输出文件“+infle+”中的反序列化数组p”);
//打印阵列。
foreach(p中的变量x)
控制台写入线(x);
Console.ReadLine();
}
}
[XmlType(TypeName=“Persons”)]
公共类人员:IEnumerable
{
私有列表内部=新列表();
公共无效添加(对象o)
{
内部。添加((人)o);
}
公共IEnumerator GetEnumerator()
{
返回inner.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
公共阶层人士
{
[XmlAttribute]
公共int ID{get;set;}
公共字符串名称{get;set;}
公共字符串{get;set;}
公共整数{get;set;}
}

谢谢您的意见!我已经解决了这个问题。因为代码中没有main方法,所以我必须编辑属性,以便SerializeOut在SerializeIn之前工作。我猜Persons XML文件只是一个模板。。。再次感谢

你能同时发布“Person”类的代码吗?此外,您提到这是编译错误,但我认为VS不会打扰您的XML文件,您将XML文件放在哪里?它不应该包含在VS项目中(至少不需要编译)。好的,编辑以包含Person类。XML文件就在/bin/debug文件夹中。这篇文章有解决方案。嗨,谢谢你的回复!我想知道是否有一种方法可以简单地编辑XML文件,使其正确加载?@Taj G,我看不到任何简单的方法可以编辑XML以加载它。您的代码没有引用任何命名的人员,这就是您得到运行时错误的地方。之后,您的代码在XML文件中没有ID属性。您需要对代码进行一些更改才能使其正常工作。
<?xml version="1.0" standalone="no"?>
<!--Created by ToXml Example in IO-->
<Persons>
    <Person ID="1001">
        <Name>Susan</Name>
        <Gender>F</Gender>
        <Age>21</Age>
    </Person>
    <Person ID="1002">
        <Name>Michael</Name>
        <Gender>M</Gender>
        <Age>25</Age>
    </Person>
    <Person ID="1003">
        <Name>Judy</Name>
        <Gender>F</Gender>
        <Age>31</Age>
    </Person>
    <Person ID="1004">
        <Name>Chloe</Name>
        <Gender>F</Gender>
        <Age>27</Age>
    </Person>
    <Person ID="1005">
        <Name>Scott</Name>
        <Gender>M</Gender>
        <Age>58</Age>
    </Person>
    <Person ID="1006">
        <Name>William</Name>
        <Gender>M</Gender>
        <Age>41</Age>
    </Person>
    <Person ID="1007">
        <Name>Mary</Name>
        <Gender>F</Gender>
        <Age>30</Age>
    </Person>
</Persons>
class Program
{
    static void Main(string[] args)
    {   
        const string infile = "x:\\Persons.xml";
        Persons p;

        using (var sr = new StreamReader(infile))
        {
            var xs = new XmlSerializer(p.GetType());
            p = (Persons)(xs.Deserialize(sr));
        }

        Console.WriteLine("Deserialized array p from output file " + infile + ".");

        // Print array.
        foreach (var x in p)
            Console.WriteLine(x);

        Console.ReadLine();
    }
}

[XmlType(TypeName = "Persons")]
public class Persons : IEnumerable<Person>
{
    private List<Person> inner = new List<Person>();

    public void Add(object o)
    {
        inner.Add((Person)o);
    }

    public IEnumerator<Person> GetEnumerator()
    {
        return inner.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}


public class Person
{
    [XmlAttribute]
    public int ID { get; set; }

    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
}