反序列化简单的 XML 成 List

17 浏览
0 Comments

反序列化简单的 XML 成 List

我知道这是一个相当愚蠢的问题,但我被卡住了...(类似的问题没有有用的答案这里

我的xml是


    
        aaa
        bbb
        ccc
        ddd
    

我有一个类像这样

public class MyClass
{
    [XmlArray("MyList")]
    [XmlArrayItem("mynode")]
    public List MyList { get; set; }
}

但是当我尝试反序列化时,我得到了一个nullerrorexception

为什么这个不起作用?

编辑:

反序列化代码:

public static Param InitConfig(string Path)
{
    XmlRootAttribute xRoot = new XmlRootAttribute();
    xRoot.ElementName = "Param";
    xRoot.IsNullable = true;
    XmlSerializer serializer = new XmlSerializer(typeof(Param), xRoot);
    using (StreamReader reader = new StreamReader(Path))
    {
        return (Param)serializer.Deserialize(reader);
    }
}

public class Param
{
    public MyClass MyClass {get; set;}
}

(实际上更复杂)

0
0 Comments

问题:如何将简单的XML反序列化为List

原因:该问题的出现可能是因为需要将包含一系列字符串的XML文档反序列化为List对象,以便在代码中进行进一步处理。

解决方法:下面是解决该问题的一种方法:

首先,创建一个包含List属性的自定义类,该类应使用XmlRoot和XmlArrayItem属性进行标记,以便在反序列化过程中正确地映射XML元素和属性。

[XmlRoot("Param")]
public class MyClass
{
    [XmlArrayItem("mynode")]
    public List MyList { get; set; }
}

然后,使用XmlSerializer类进行反序列化操作。首先,实例化XmlSerializer对象,指定要反序列化的对象类型。然后,使用File.OpenRead方法打开XML文件,并在using语句块中使用Deserialize方法将XML文件反序列化为MyClass对象。

XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
using (var stream = File.OpenRead("C:\\Users\\t0408\\Desktop\\testfor.xml"))
{
    MyClass myClass = (MyClass)serializer.Deserialize(stream);
}

通过以上步骤,可以将简单的XML反序列化为List对象,并在代码中进一步处理。

希望对你有帮助!

谢谢,

Lineesh

0
0 Comments

问题:如何将简单的XML反序列化为List

原因:在反序列化XML时,需要使用XmlRoot属性和XmlArray属性来指定XML元素的名称和结构。如果没有正确设置这些属性,反序列化过程可能会失败或返回不正确的结果。

解决方法:

1. 在需要反序列化的类上使用XmlRoot属性,指定XML元素的名称。例如,在MyClass类上添加[XmlRoot("Param")]。

2. 在需要反序列化的属性上使用XmlArray属性,指定XML数组元素的名称。例如,在MyClass类的MyList属性上添加[XmlArray("MyList")]。

3. 在XmlArray属性上使用XmlArrayItem属性,指定XML数组元素的子元素的名称。例如,在MyClass类的MyList属性上添加[XmlArrayItem("mynode")]。

4. 使用XmlSerializer类的实例来执行反序列化操作。例如,使用typeof(MyClass)指定要反序列化的类的类型。

5. 使用File.OpenRead方法打开包含XML数据的文件流。

6. 调用XmlSerializer的Deserialize方法,将文件流传递给它,并将结果转换为MyClass类型的对象。

下面是一个示例代码,展示了如何使用上述方法来反序列化简单的XML为List

[XmlRoot("Param")]
public class MyClass
{
    [XmlArray("MyList")]
    [XmlArrayItem("mynode")]
    public List MyList { get; set; }
}
XmlSerializer se = new XmlSerializer(typeof(MyClass));
using(var stream = File.OpenRead("filePath"))
{
   var myClass = (MyClass) se.Deserialize(stream);
}

通过按照上述步骤设置属性和使用XmlSerializer类,您可以成功地将简单的XML反序列化为List对象。

0
0 Comments

问题的出现原因是没有正确设置XML序列化器,因此无法将简单的XML反序列化为List。解决方法是在代码中设置正确的XML元素和属性,以便序列化器能够正确地将XML转换为指定类型的对象。

文章内容如下:

在没有看到实际执行序列化的代码之前,很难找到错误。然而,你可以尝试告诉序列化器XML的顶级元素是什么:

[XmlRoot("Param")]
public class MyClass
{
    [XmlArray("MyList")]
    [XmlArrayItem("mynode")]
    public List MyList { get; set; }
}

编辑:

序列化器的类型应为MyClass:

public static Param InitConfig(string Path)
{
    XmlRootAttribute xRoot = new XmlRootAttribute();
    xRoot.ElementName = "Param";
    xRoot.IsNullable = true;
    XmlSerializer serializer = new XmlSerializer(typeof(MyClass), xRoot);
    using (StreamReader reader = new StreamReader(Path))
    {
        return new Param { MyClass = (MyClass)serializer.Deserialize(reader) };
    }
}

这段代码无法编译。XmlElement属性无法应用于类。

以上是解决问题的原因和方法,通过设置正确的XML元素和属性,可以使XML序列化器正确将XML转换为List类型的对象。

0