0
System.InvalidOperationException:参数对象'SI_Foodware.Model.LocalisationCollection'的类型不是原始的。 System.InvalidOperationException:生成XML文档时发生错误。XmlSerializer:参数对象的类型不是原始的
LocalisationCollection.cs
using System.Xml.Serialization;
namespace SI_Foodware.Model
{
[XmlRoot("LocalisationCollection")]
public class LocalisationCollection
{
[XmlArray("LocalisationItems")]
[XmlArrayItem("LocalisationItem", typeof(LocalisationItem))]
public LocalisationItem[] LocalisationItem { get; set; }
}
}
LocalisationItem.cs
using System.Xml.Serialization;
using SQLite.Net.Attributes;
namespace SI_Foodware.Model
{
public class LocalisationItem
{
[PrimaryKey, AutoIncrement]
[XmlIgnore]
public int Id { get; set; }
[XmlElement("Page")]
public string Page { get; set; }
[XmlElement("Field")]
public string Field { get; set; }
[XmlElement("Language")]
public string Language { get; set; }
[XmlElement("Value")]
public string Value { get; set; }
[XmlElement("Width")]
public string Width { get; set; }
[XmlElement("Columns")]
public string Columns { get; set; }
[XmlElement("Table")]
public string Table { get; set; }
[XmlElement("Title")]
public string Title { get; set; }
[XmlElement("Parent")]
public string Parent { get; set; }
[XmlElement("IconSource")]
public string IconSource { get; set; }
[XmlElement("TargetType")]
public string TargetType { get; set; }
}
}
功能将序列
public bool Serialize(string filename)
{
var path = GetPath(filename);
var serializer = new XmlSerializer(typeof(List<LocalisationCollection>));
var writer = new FileStream(path, FileMode.Create);
var localisationItems = db.GetAllItems<LocalisationItem>();
var collection = new LocalisationCollection();
collection.LocalisationItem = localisationItems.ToArray();
try
{
serializer.Serialize(writer, collection);
writer.Close();
return true;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
我想somethink这样
<?xml version="1.0" encoding="utf-8"?>
<LocalisationCollection>
<LocalisationItems>
<LocalisationItem>
<Language>Nederlands</Language>
</LocalisationItem>
<LocalisationItem>
<Language>Engels</Language>
</LocalisationItem>
<LocalisationItem>
<Page>LoginPage</Page>
<Field>grd_grid</Field>
<Columns>2</Columns>
</LocalisationItem>
<LocalisationItem>
<Page>LoginPage</Page>
<Field>grd_grid</Field>
<Width>120</Width>
</LocalisationItem>
<LocalisationItem>
<Page>LoginPage</Page>
<Field>grd_grid</Field>
<Width>180</Width>
</LocalisationItem>
</LocalisationItems>
</LocalisationCollection>
您的序列化程序使用List,但传递的实际对象是LocalisationCollection。要获得所需的XML输出,您不需要将LocalisationColleciton放入列表。 –
捕获所有异常并仅通过一条消息重新抛出一个通用异常并不是一个好主意,因为这会消除异常类型和堆栈跟踪。请参阅[为什么在C#中捕获并重新抛出异常?](https://stackoverflow.com/questions/881473/why-catch-and-rethrow-an-exception-in-c) – dbc