public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { existingValue = existingValue ?? Activator.CreateInstance(objectType, true); JObject jObject = JObject.Load(reader); FieldInfo[] privateFields = objectType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic); foreach (FieldInfo field in privateFields) { JToken jToken = jObject[field.Name]; // Missing field if (jToken == null) { MissingFields.Add(field); continue; } jObject.Remove(field.Name); object value = jToken.ToObject(field.FieldType); field.SetValue(existingValue, value); } foreach (KeyValuePair <string, JToken> pair in jObject) { // Extra field ExtraFields.Add(pair); } return(existingValue); }
public void Clear() { MissingFields.Clear(); ExtraFields.Clear(); }