我正在使用SimpleMVVM,在编辑对象时,SimpleMVVM会创建一个新的Model对象和一个Copy对象。使用Newtonsoft.Json.JsonConvert将原始Model对象克隆到Copy对象。
以下是实际代码:
Copy = Model.Clone();
...
public static T Clone<T>(this T obj)
{
var settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All
};
var json = JsonConvert.SerializeObject(obj, settings);
var result = JsonConvert.DeserializeObject<T>(json, settings);
return result;
}
当克隆方法尝试反序列化DataView时,我遇到了问题。错误是:
类型&#39; System.ArgumentException&#39;的例外情况发生在Newtonsoft.Json.dll但未在用户代码中处理
我不确定如何处理此错误,因为导致错误的唯一原因是检索(获取)此属性:
/// <summary>
/// Dataview of SQL Results Table
/// </summary>
[XmlIgnore]
public DataView TableDataView
{
get
{
return _TableDataView;
}
set
{
_TableDataView = value;
// Add listener for changes to the TableDataView
_TableDataView.ListChanged += new ListChangedEventHandler(TableDataViewChanged);
TableDataViewIsDirty = false;
NotifyPropertyChanged(m => m.TableDataView);
}
}
private DataView _TableDataView = new DataView();
尝试使用JSON反序列化DataView是否存在问题?如果是这样,是否有解决方法?或者,有没有办法指定一个属性(TableDataView)不包含在Serialize \ Deserialize进程中(类似于[XmlIgnore]标志)?
答案 0 :(得分:1)
要阻止.select
属性序列化,您可以应用[JsonIgnore]
属性;它对Json.NET的作用与[XmlIgnore]
对DataTableView
的作用相同。