我正在尝试将XML文件反序列化为我的Android应用程序中使用Xamarin Monodroid开发的对象。
我在纯C#中生成XML,将XML文件复制到应用程序的assets文件夹中,然后在应用程序启动时反序列化它。
[Serializable]
public class MyGreatObject
{
public string ObjectName;
public string ObjectLink;
public string ObjectStuff;
public List<OtherGreatObject> OtherObjects;
public MyGreatObject()
{
OtherObjects = new List<OtherGreatObject>();
}
}
OtherGreaterObject
有共同的属性(我的意思是字符串格式)。
所以,我生成了XML并且有这样的东西:
<?xml version="1.0" encoding="utf-8"?>
<MyGreatObject xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ObjectName>This is the object name</ObjectName>
<ObjectLink>http://www.xamarin-is-awesome.com</ObjectLink>
<ObjectStuff>Description</ObjectStuff>
<OtherObjects>
<OtherGreatObject>...</OtherGreatObject>
<OtherGreatObject>...</OtherGreatObject>
</OtherObjects>
</MyGreatObject>
我尝试将其反序列化:
internal static class SerializableXml
{
public static MyGreatObject LoadData(Context context_, string fileName_)
{
MyGreatObject greatObject = new MyGreatObject();
try
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyGreatObject));
using (Stream input = context_.Assets.Open(fileName_, Android.Content.Res.Access.Buffer))
greatObject = xmlSerializer.Deserialize(input) as MyGreatObject;
}
catch (Exception exception)
{
Android.Util.Log.Error("XML", "ERROR IN LOADING");
Android.Util.Log.Error("XML", exception.ToString());
throw;
}
return greatObject;
}
}
但我收到错误System.Xml.XmlException: Document element did not appear. Line 1, position 1.
。
at Mono.Xml2.XmlTextReader.Read() [0x00000] in <filename unknown>:0
at System.Xml.XmlTextReader.Read() [0x00000] in <filename unknown>:0
at System.Xml.XmlReader.MoveToCOntent() [0x00000] in <filename unknown>:0
at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot() [0x00000] in <filename unknown>:0
at System.Xml.Serialization.XmlSerializer.Deserialize(System.Xml.SerializationReader reader) [0x00000] in <filename unknown>:0
我在Google上浪费了很多时间,所以我问你。
非常感谢您提供的帮助。
答案 0 :(得分:0)
好了,问题解决了。
Google没有发现任何关于错误的信息(在我的情况下)。
我认为XmlSerializer
(几年前我读过Mono Framework中的一个错误),但事实并非如此。
然而,我认为XML中存在错误,但根本不确定。为什么我会收到这样的错误消息?我应该有“无效的节点名称”,“无效的属性”或类似的东西。
但我是对的。 一个节点名称不好,这会返回Document element did not appear. Line 1, position 1.
(或者根本没有任何意义的异常消息)!
所以,问题解决了。
答案 1 :(得分:0)
我使用Xamarin.iOS 8.4也遇到了这个错误 即使在Android上一切正常,在iOS版本上我收到了错误:
Document element did not appear. Line 1, position 1.
我的XML文件(不是手动编写,而是用c#序列化)有以下几行:
<?xml version="1.0" ?>
我通过添加编码属性修复了它,如下所示:
<?xml version="1.0" encoding="utf-8"?>
如果你有很多文件,显然这不是最好的解决方案,但也许串行器中有一种方法可以编辑编码。我没有考虑到这一点,因为我不需要,但如果有人遇到这个问题,那可能是一个开始。