1

我正在尝试使用 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
4

1 回答 1

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"
        }
    }
}
于 2013-09-03T20:16:20.227 回答