System.InvalidOperationException: Тип объекта аргумента 'SI_Foodware.Model.LocalisationCollection' не является примитивным. System.InvalidOperationException: При создании XML-документа произошла ошибка.XmlSerializer: Тип объекта аргумента не является примитивным
LocalisationCollection.csusing 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 в список . –
Ловля всех исключений и повторное создание общего исключения с помощью только сообщения не является хорошей идеей, так как это стирает тип исключения и трассировку стека. См. [Почему catch и ретронирование исключения в C#?] (Https://stackoverflow.com/questions/881473/why-catch-and-rethrow-an-exception-in-c) – dbc