1

Xamarin Monodroid で開発された Android アプリケーションのオブジェクトに XML ファイルを逆シリアル化しようとしています)。

純粋な 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 で多くの時間を失ったので、お尋ねします。

あなたが提供できる助けを前もって感謝します。

4

2 に答える 2

0

Xamarin.iOS 8.4 を使用しても、このエラーに遭遇しました。Android ではすべて正常に動作しましたが、iOS ビルドでは次のエラーが発生しました。

Document element did not appear.  Line 1, position 1.

私の XML ファイル (手動で作成されたものではなく、C# でシリアル化されたもの) には次の行がありました。

<?xml version="1.0" ?>

次のように encoding プロパティを追加して修正しました。

<?xml version="1.0" encoding="utf-8"?>

多くのファイルがある場合、明らかにこれは最善の解決策ではありませんが、エンコーディングを編集する方法がシリアライザーにある可能性があります。必要がなかったので調べませんでしたが、誰かがこの問題に遭遇した場合、それが始まりかもしれません.

于 2014-11-22T01:14:09.577 に答える
0

さて、問題は解決しました。

Google はエラーについて何も見つけられませんでした (私の状況では)。XmlSerializer(数年前に Mono Framework のエラーについて読みました) と思いましたが、そうではありませんでした。

それよりも、XML に何か問題があると思っていましたが、まったく確信が持てませんでした。このようなエラー メッセージが表示されるのはなぜですか? 「無効なノード名」、「無効な属性」、またはそのようなものが必要です。

しかし、私は正しかった。ノードに不適切な名前があり、これが返されますDocument element did not appear. Line 1, position 1. (または、まったく意味のない例外メッセージ) !

それで、問題は解決しました。

于 2013-08-06T09:50:35.930 に答える