簡體   English   中英

Xamarin:反序列化XML-“ XML文檔中存在錯誤”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM