我正在创建一个处理变更跟踪(和其他东西)的通用控制子类,主要用于将数据绑定到底层对象(最终是数据库,但我不应该依赖于此) 。
我需要在编辑开始时跟踪值,在任何给定点跟踪当前值,并在任何给定点保持这些值的清晰分离。因为我不知道类型,所以适用的属性被声明为对象:
class DataboundControl : Control
{
private string _valuePropertyName;
private string _changedEventName;
public Control BaseControl { get; private set; }
public object Value { get { return Objects.GetPropertyValue(this.BaseControl, _valuePropertyName); } }
public bool IsDirty { get { return object.Equals(this.Value, this.ControlEditStartValue); } }
// change tracking
public object ControlEditStartValue { get; set; }
public object RecordEditStartValue { get; set; }
public DataboundControl(Control control, string valuePropertyName, string changedEventName) {
this.BaseControl = control;
this._valuePropertyName = valuePropertyName;
this._changedEventName = changedEventName;
registerChangedEvent();
}
}
在上面的例子中,我需要存储"非reffed" ControlEditStartValue和RecordEditStartValue的副本。
鉴于控件值几乎总是标准值-ish类型(string,int,bool - 映射到数据库字段的东西),我更喜欢默认处理它并处理明确的例外情况。
我觉得这应该很容易,但是随之而来的是一堆乱七八糟的浅/深拷贝。鉴于价值几乎总是非常“浅”。就一个物体而言,最好的方法是什么?
答案 0 :(得分:1)
使用Json.Net序列化/反序列化值