C#Xml反序列化错误
我是newby.net和xamarin。我正在尝试开发一个xamarin表单应用程序。当我试图反序列化我的xml时,我发现了一个错误C#Xml反序列化错误,c#,xml,xamarin,deserialization,C#,Xml,Xamarin,Deserialization,我是newby.net和xamarin。我正在尝试开发一个xamarin表单应用程序。当我试图反序列化我的xml时,我发现了一个错误 Error Message is 在System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(System.Xml.Serialization.TypeData TypeData,System.Xml.Serialization.XmlRootAttribute根,System.Stri
Error Message is
在System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(System.Xml.Serialization.TypeData TypeData,System.Xml.Serialization.XmlRootAttribute根,System.String defaultNamespace)[0x0013d]中:0
位于:0中的System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(System.Type类型,System.Xml.Serialization.XmlRootAttribute根,System.String defaultNamespace)[0x00048]
位于System.Xml.Serialization.XmlSerializator..ctor(System.Type类型、System.Xml.Serialization.XmlAttributeOverrides、System.Type[]外部类型、System.Xml.Serialization.XmlRootAttribute根、System.String defaultNamespace)[0x00041]中:0
0中的System.Xml.Serialization.XmlSerializer..ctor(System.Type类型)[0x00000]处
在C:\Users\TEKINHP\source\repos\FimaksApp\Fmkt44\Fmkt44\icerik.xaml.cs:83中的Fmkt44.icerik.Deserialize1(System.String IasReturn)[0x00002]处
序列化程序出错。反序列化错误消息为:
由于其保护级别,无法访问REPORTLIST。只能处理公共类型
使类型公开
XmlSerializer
无法处理内部类型。另外:您不需要[Serializable]
-XmlSerializer
不关心
您还需要对集合执行[xmlement]
,以告诉它不要添加/期望使用包装器元素
最后工作版本:
[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; }
}
[XmlRoot(“报告列表”)]
公共类报告列表
{
[XmlElement(“行”)]
公共列表行{get;}=new List();
}
公共类行
{
[XmlElement(“INSTNUMBER”)]
公共字符串编号{get;set;}
[XmlElement(“材料”)]
公共字符串材质{get;set;}
}
btw:您应该能够使用newstringreader(MyXml)
而不是GenerateStreamFromString
谢谢。我想没那么简单
<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));
}
[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; }
}