【发布时间】:2020-02-20 08:30:10
【问题描述】:
我正在尝试使用 XmlSerializer 将对象序列化为 xml,但不断收到此错误:
System.InvalidOperationException: [MySql.Data.MySqlClient.MySqlParameter] cannot be serialized because it does not have a parameterless constructor.
我遵循why xml serializable class need a parameterless constructor 的解决方案,这似乎已经解决了其他所有人的问题,但我仍然收到错误。当我添加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();
}
文件.cs
public async Task<IActionResult> SaveData(params...)
{
await new MyFile<MySqlParameter>(accessParam, dbContext).Save(xmlObj);
}
【问题讨论】:
-
问题肯定是
MySqlParameter不能被序列化,而不是MyClass- 那么为什么要向MyClass添加构造函数呢?你使用的是什么版本的MySql?因为MySqlParameterdoes have a parameterless constructor。您可以发布您的问题的可编译复制吗? -
为什么要尝试序列化
MySqlParameter?那只是保存时发送到数据库的数据,它在父方法中,而不是XmlSerializer -
您是否尝试将您的构造函数更改为
private或internal? -
是的,三个都试过了
-
Why would it be trying to serialise- 我不知道为什么,但错误消息清楚地表明它正在被序列化。您需要发布一些代码。
标签: c# xml-serialization