XML 无法序列化 - 无参数构造函数错误,即使有构造函数
XML cannot be serialized - parameterless constructor error, even with constructor
我正在尝试使用 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();
}
File.cs
public async Task<IActionResult> SaveData(params...)
{
await new MyFile<MySqlParameter>(accessParam, dbContext).Save(xmlObj);
}
你应该添加
public MyClass(){}
到class。没有主体和空主体之间是有区别的,这正是您在此构造函数上想要的。
我想通了...
我一直在创建一个新的 XmlSerializer
并传入 SO 答案中发布的参数:
XmlSerializer xmlSer = new XmlSerializer(this.GetType());
当使用与反序列化相同的 XmlSerializer
时,它确实工作得很好:
XmlSerializer objSer = new XmlSerializer(typeof(MyClass));
我正在尝试使用 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();
}
File.cs
public async Task<IActionResult> SaveData(params...)
{
await new MyFile<MySqlParameter>(accessParam, dbContext).Save(xmlObj);
}
你应该添加
public MyClass(){}
到class。没有主体和空主体之间是有区别的,这正是您在此构造函数上想要的。
我想通了...
我一直在创建一个新的 XmlSerializer
并传入 SO 答案中发布的参数:
XmlSerializer xmlSer = new XmlSerializer(this.GetType());
当使用与反序列化相同的 XmlSerializer
时,它确实工作得很好:
XmlSerializer objSer = new XmlSerializer(typeof(MyClass));