我正在尝试使用Visual Studios的“应用程序设置”功能轻松保存程序的设置。我尝试序列化的一个类包含来自MathNet.Numerics库的许多DenseMatrix对象。 DenseMatrix类没有无参数构造函数,因此在调用My.Settings.Save()时序列化会崩溃。我尝试用Double(,)替换矩阵,但也崩溃了。然后我尝试编写一些代码来包装DenseMatrix如下,但它也失败我猜测因为所有基类都必须有无参数构造函数,但我不确定。是否存在另一种逻辑方式来存储可由My.Settings.Save自动序列化的矩阵?
<SettingsSerializeAs(SettingsSerializeAs.Xml)>
Public Class AvtMatrix
Inherits DenseMatrix
Public Sub New()
My.Base.New(3,3)
End Sub
End Class
答案 0 :(得分:2)
深入研究一些IL,看起来它使用XmlSerializer
- 在这种情况下,唯一的答案是:你不能 - 它需要一个公共的无参数构造函数。但可以欺骗一点 - [Obsolete]
;这有用,例如:
using System;
using System.IO;
using System.Xml.Serialization;
public class Foo
{
public string Bar { get; set; }
public Foo(string bar)
{
Bar = bar;
}
[Obsolete("You don't look like a serializer", true)]
public Foo()
{
}
}
class Program
{
static void Main()
{
var ser = new XmlSerializer(typeof(Foo));
using (var ms = new MemoryStream())
{
ser.Serialize(ms, new Foo("abc"));
ms.Position = 0;
Foo clone = (Foo)ser.Deserialize(ms);
Console.WriteLine(clone.Bar); // "abc"
}
}
}