[英]Xamarin: Deserializing XML - “There is an error in XML document”
為了在Xamarin-Forms項目中使用一些XML文件,我試圖重新創建此示例代碼中給出的步驟,但是我總是收到錯誤消息:
System.Xml.XmlSerializer.dll中發生類型為'System.InvalidOperationException'的異常,但未在用戶代碼中處理
附加信息:XML文檔(2、2)中有錯誤。
該示例代碼可以正常工作。
這是我使用的XML文件(作為嵌入式資源):
<?xml version="1.0" encoding="utf-8" ?>
<Items>
<Item>
<Name>One</Name>
<State>Alpha</State>
</Item>
<Item>
<Name>Two</Name>
<State>Two</State>
</Item>
</Items>
這是我使用的C#代碼:
using System;
using Xamarin.Forms;
using System.Reflection;
using System.IO;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace XmlTestProject
{
public class XmlContentPage : ContentPage
{
public XmlContentPage()
{
//get access to xml file
var assembly = GetType().GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream("XmlTestProject.XmlFile.xml");
List<Item> items;
using (var reader = new System.IO.StreamReader(stream))
{
var serializer = new XmlSerializer(typeof(List<Item>));
items = (List<Item>)serializer.Deserialize(reader);
}
var listView = new ListView();
listView.ItemsSource = items;
Content = new StackLayout
{
Children = {
listView
}
};
}
}
public class Item
{
public string Name { get; set; }
public string State { get; set; }
public override string ToString()
{
return Name;
}
}
}
我正在使用Visual Studio 2015社區版和Xamarin.Forms 2.2.0.5-pre2
xml應該具有ArrayOfItem而不是Items :
<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfItem>
<Item>
<Name>One</Name>
<State>Alpha</State>
</Item>
<Item>
<Name>Two</Name>
<State>Two</State>
</Item>
</ArrayOfItem>
嘗試為您的列表聲明一個包裝器類,然后像這樣反序列化:
var serializer = new XmlSerializer(typeof(ItemList));
ItemList items = (ItemList)serializer.Deserialize(reader);
listView.ItemsSource = items.Items;
[XmlRoot("Items")]
public class ItemList
{
public ItemList() {Items = new List<Item>();}
[XmlElement("Item")]
public List<Item> Items {get;set;}
}
public class Item
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("State")]
public string State { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.