自定义画布类序列化



我有一个类,它有一些属性,我想序列化这些属性。我的问题是我无法序列化"CustomCanvasClass"。我只需要它的X/Y属性。因此,我创建了一个新属性,并将"CustomCanvasClass"属性标记为[NonSerialized]。

不幸的是,它不会起作用。也许有人有另一个想法,把这些数据从课堂上复制出来。

[Serializable]
public class CustomClass
{
//won't serialized
public double X
{
get
{
return Canvas.GetLeft(CustomCanvasClass);
}
set
{
Canvas.SetLeft(CustomCanvasClass, value);
}
}
public string Property1 { get; set; }
//CanvasElement inherits from Canvas. Serialization would throw a Exception.
public CanvasElement CustomCanvasClass
{
get
{
return _CustomCanvasClass;
}
set
{
_CustomCanvasClass = value;
}
}
[NonSerialized]
private CanvasElement _CustomCanvasClass;
}

对所需的属性使用DTO并对其进行序列化。

DTO代表数据传输对象。它只包含要传输的数据,不包含逻辑。

例如,添加这样的类:

class MyCustomClassDto
{
public double X {get;set;}
public double Y {get;set;}
}

因此,与其直接序列化自定义类,不如使用X和Y值初始化该类的实例并序列化该实例。

然后在你的主类中,你可以添加以下内容:

public MyCustomClassDto GetData()
{
return new MyCustomerClassDto{X = X, Y = Y};
}

您也可以在DTO中添加一个序列化方法。

或者,您可以使用像automapper这样的映射工具——如果您在不同的层中有许多DTO或相应的对象,那么它将是合适的。

希望这能让这个想法变得清晰。如果看不到更多的细节/上下文,就看不到其他扩展方式。

在对这个问题的评论中,适当的mvvm-itemspanel方法是可取的,但它可能需要大量重写,这取决于您现有的代码库。您可能想考虑这种重构imo的商业案例,考虑在其基础上可能会构建更多的东西

最新更新