C# Xml 反序列化错误
Posted
技术标签:
【中文标题】C# Xml 反序列化错误【英文标题】:C# Xml Deserializion error 【发布时间】:2018-06-04 05:48:12 【问题描述】:我是 .net 和 xamarin 的新手。我正在尝试开发一个 xamarin 表单应用程序。当我尝试反序列化我的 xml 时出现错误。
Error Message is
在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x0013d] in :0 在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type 类型,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00048] 在 :0 在 System.Xml.Serialization.XmlSerializer..ctor (System.Type 类型,System.Xml.Serialization.XmlAttributeOverrides 覆盖,System.Type[] extraTypes,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00041]在 :0 在 System.Xml.Serialization.XmlSerializer..ctor (System.Type 类型) [0x00000] 在 :0 在 C:\Users\TEKINHP\source\repos\FimaksApp\Fmkt44\Fmkt44\icerik.xaml.cs:83 中的 Fmkt44.icerik.Deserialize1 (System.String IasReturn) [0x00002]
[XmlRoot("REPORTLIST")]
[Serializable]
class REPORTLIST
public REPORTLIST()
public List<ROW> ROW get; set;
[Serializable]
class ROW
public ROW()
public string INSTNUMBER get; set;
public string MATERIAL get; set;
我的 xml 文件是
<REPORTLIST>
<ROW>
<MATERIAL>A</MATERIAL>
<INSTNUMBER>B</INSTNUMBER>
</ROW>
</REPORTLIST>
这是我的反序列化方法
public static Stream GenerateStreamFromString(string s)
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
REPORTLIST Deserialize1(String MyXml)
XmlSerializer serializer = new XmlSerializer(typeof(REPORTLIST));
return (REPORTLIST)serializer.Deserialize(GenerateStreamFromString(MyXml));
serializer.Deserialize 发生错误
【问题讨论】:
顺便说一句:你应该可以使用new StringReader(MyXml)
而不是GenerateStreamFromString
【参考方案1】:
错误信息是:
REPORTLIST 因其保护级别而无法访问。只能处理公共类型。
创建类型public
。 XmlSerializer
不能在 internal
类型上工作。另外:你不需要[Serializable]
- XmlSerializer
不关心。
您还需要在集合上使用[XmlElement]
,告诉它不要添加/期望包装元素。
最终工作版本:
[XmlRoot("REPORTLIST")]
public class ReportList
[XmlElement("ROW")]
public List<Row> Rows get; = new List<Row>();
public class Row
[XmlElement("INSTNUMBER")]
public string InstNumber get; set;
[XmlElement("MATERIAL")]
public string Material get; set;
【讨论】:
谢谢。没想到这么简单以上是关于C# Xml 反序列化错误的主要内容,如果未能解决你的问题,请参考以下文章
将 xml 反序列化为 c# 对象时,XML 文档 (2, 2) 出现错误
C# XMLSerializer 将错误的类型反序列化为 List