XML не может быть сериализовано - ошибка конструктора без параметров, даже с конструктором - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь сериализовать объект в xml, используя XmlSerializer, но продолжаю получать эту ошибку:

System.InvalidOperationException: [MySql.Data.MySqlClient.MySqlParameter] cannot be serialized because it does not have a parameterless constructor.

Я следовал решению до , почему xml сериализуемый класс нуждается в Конструктор без параметров , который, кажется, решил проблему для всех остальных, но я все еще получаю ошибку. Когда я добавляю public MyClass(), это дает мне 'MyClass.MyClass()' must declare a body because it is not marked abstract, extern, or partial, поэтому я добавляю тело, и возвращается первая ошибка.

Обратите внимание, что изначально не было никаких конструкторов, без параметров или иначе, поэтому я не делаю понять, почему он не просто автоматически создает свое собственное.

Что я делаю не так?

Код добавлен:

MyFile. cs

public async Task Save(MyClass xmlObj)
{
    XmlSerializer xmlSer = new XmlSerializer(this.GetType()); //I think the problem is likely to be here
    StringWriter strWriter = new StringWriter();

    xmlSer.Serialize(strWriter, xmlObj);
    objToUpdate.ColName = (strWriter.ToString());
    await dbContext.SaveChangesAsync();
}

File.cs

public async Task<IActionResult> SaveData(params...)
{
    await new MyFile<MySqlParameter>(accessParam, dbContext).Save(xmlObj);
}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я понял это ...

Я создал новый XmlSerializer и передал параметр, как указано в SO-ответе:

XmlSerializer xmlSer = new XmlSerializer(this.GetType());

Когда на самом деле это прекрасно работает, использовать тот же XmlSerializer, что и при десериализации:

XmlSerializer objSer = new XmlSerializer(typeof(MyClass));

0 голосов
/ 20 февраля 2020

Вы должны были добавить

public MyClass(){}

в класс. Существует разница между отсутствием тела и пустым телом, которое вы хотите использовать в этом конструкторе.

...