Monodroid:Document元素没有出现

本文关键字:元素 Document Monodroid | 更新日期: 2023-09-27 18:26:26

我正试图将一个XML文件反序列化为我的android应用程序中的一个对象,该应用程序是用Xamarin Monodoid开发的)。

我用纯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

我在谷歌上浪费了很多时间,所以我问你。

提前非常感谢您所能提供的帮助。

Monodroid:Document元素没有出现

问题解决了。

谷歌(在我的情况下)没有发现任何关于这个错误的信息。我认为XmlSerializer(几年前我读到Mono Framework中的一个错误),但事实并非如此。

然后,我认为XML中出现了问题,但根本不确定。为什么我会收到这样的错误信息?我应该有"无效节点名"、"无效属性"或类似的内容。

但我是对的节点有一个坏名称,这将返回Document element did not appear. Line 1, position 1.(或根本没有任何意义的异常消息)

所以,问题解决了。

我在使用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"?>

如果您有很多文件,显然这不是最好的解决方案,但序列化程序中可能有一种方法可以编辑编码。我没有调查,因为我不需要,但如果有人遇到这个问题,这可能是一个开始。