using Newtonsoft.Json.Linq;
public static void Main()
static JObject Projector(JObject originalJObject, string commaSeparatedListOfFields)
var finalJObject = new JObject();
var propertiesArray = commaSeparatedListOfFields.Split(',');
for (var i = 0; i < propertiesArray.Length; i++)
var currentProperty = propertiesArray[i];
var fieldsArray = currentProperty.Trim().Split('.');
var arrayLength = fieldsArray.Length;
var tempSourceJObject = new JObject();
var tempFinalJObject = new JObject();
for (var j = 0; j < arrayLength; j++)
var currentField = fieldsArray[j];
finalJObject[currentField] = finalJObject[currentField] != null ? (JObject)finalJObject[currentField] : new JObject();
tempFinalJObject = (JObject)finalJObject[currentField];
tempSourceJObject = (JObject)originalJObject[currentField];
else if (j == arrayLength - 1)
if (tempFinalJObject != null)
tempFinalJObject[currentField] = tempSourceJObject?[currentField];
if (tempFinalJObject != null && tempSourceJObject != null)
tempFinalJObject[currentField] = tempFinalJObject[currentField] != null ? (JObject)tempFinalJObject[currentField] : new JObject();
tempFinalJObject = (JObject)tempFinalJObject[currentField];
tempSourceJObject = (JObject)tempSourceJObject[currentField];
finalJObject[fieldsArray[0]] = originalJObject[fieldsArray[0]];
dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Artist = "2Pac";
jsonObject.Person = new JObject();
jsonObject.Person.Details = new JObject();
jsonObject.Person.Present = true;
jsonObject.Person.Details.FirstName = "Baaji";
jsonObject.Person.Details.LastName = "Shaik";
var hello = Projector(jsonObject, "Year, Person.Details.FirstName, Person.Details.LastName");
Console.WriteLine(hello);