类型' System.ArgumentException'的例外情况发生在Newtonsoft.Json.dll但未在用户代码中处理

时间:2015-10-02 14:22:07

标签: c# json mvvm viewmodel

我正在使用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]标志)?

1 个答案:

答案 0 :(得分:1)

要阻止.select属性序列化,您可以应用[JsonIgnore]属性;它对Json.NET的作用与[XmlIgnore]DataTableView的作用相同。