using Newtonsoft.Json.Linq;
public static void Main()
JObject o1 = JObject.Parse(@"{
JObject o2 = JObject.Parse(@"{
'Roles': [ 'User', 'Admin' ]
o1.Merge(o2, new JsonMergeSettings
MergeArrayHandling = MergeArrayHandling.Union
string json = o1.ToString();
[JsonConverter(typeof(PersonConverter))]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
class PersonConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(Person);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
Person person = (Person)value;
JObject result = new JObject();
result.Add("id", person.Id);
result.Add("fullname", (person.FirstName + " " + person.LastName).Trim());
result.Add("address", (person.Address1 + " " + person.Address2).Trim());
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject obj = JObject.Load(reader);
Person person = new Person();
person.Id = (int)obj["id"];
string fullName = (string)obj["fullname"];
string[] parts = fullName.Split(new char[] { ' ' }, 2);
person.FirstName = parts[0];
person.LastName = parts[1];
person.Address1 = (string)obj["address"];