using System.Collections.Generic;
using System.Collections;
using Newtonsoft.Json.Linq;
using System.Web.Security.AntiXss;
public static void Main()
var jsonMessage = "{\r\n \"Data\": { \r\n \"ListaTransferencia\": [\r\n {\r\n \"NsuTransferencia\": \"31\",\r\n \"DataTransacaoInicial\": \"2020-06-04T07:22:30.435Z\",\r\n \"IdentificadorOrigem\": \"test_reference\",\r\n \"CpfCnpj\": 50792508106,\r\n \"ValorOriginal\": 100\r\n },\r\n {\r\n \"NsuTransferencia\": \"32\",\r\n \"DataTransacaoInicial\": \"2020-06-04T07:22:30.435Z\",\r\n \"IdentificadorOrigem\": \"test_reference2\",\r\n \"CpfCnpj\": 50792508106,\r\n \"ValorOriginal\": 200\r\n }\r\n ]\r\n },\r\n \"ResultCode\": 0,\r\n \"Message\": \"Sucesso.\",\r\n \"ValidationData\": null\r\n}";
var json = JToken.Parse(jsonMessage);
var jsonPath = "Data.ListaTransferencia";
var token = GetToken(json, jsonPath);
var array = GetArray(token);
var flattenList = new StringBuilder();
foreach(JObject item in array)
var flattenEntries = Flatten<JToken>(item, null, e => e.Path, e => e.ToObject<string>(), new Dictionary<string, object>());
var entry = Format(flattenEntries,"");
flattenList.AppendLine(entry);
Console.WriteLine(flattenList.ToString());
public static IDictionary<string, object> Flatten<TEntry>(IEnumerable entries, string path, Func<TEntry, string> getKey, Func<TEntry, object> getValue, IDictionary<string, object> result)
foreach (TEntry entry in entries)
var entryKey = getKey(entry);
var key = !string.IsNullOrEmpty(path) ? String.Format("{0}.{1}", path, entryKey) : entryKey;
var entryValue = getValue(entry);
FlattenObject(entryValue, key, result);
private static void FlattenObject(object obj, string key, IDictionary<string, object> result)
var genericEnumerable = obj as IEnumerable<KeyValuePair<string, object>>;
if (genericEnumerable != null)
Flatten<KeyValuePair<string, object>>(genericEnumerable, key, e => e.Key, e => e.Value, result);
var dictValue = obj as IDictionary;
Flatten<DictionaryEntry>(dictValue, key, e => e.Key.ToString(), e => e.Value, result);
var array = obj as IEnumerable;
if (array != null && !(obj is string))
foreach (var item in array)
var itemKey = String.Format("{0}[{1}]", key,index);
FlattenObject(item, itemKey, result);
public static string Format(IEnumerable<KeyValuePair<string, object>> entries, string keyPrefix)
var sb = new StringBuilder();
var flattenEntries = Flatten<KeyValuePair<string, object>>(entries, null, e => e.Key, e => e.Value, new Dictionary<string, object>());
foreach (var entry in flattenEntries)
sb.Append(AntiXssEncoder.UrlEncode(Convert.ToString(entry.Value)));
return sb.Length > 0 ? sb.ToString(0, sb.Length - 1) : string.Empty;
public static IEnumerable<JToken> GetArray(JToken jToken)
var valueList = new List<JToken>();
var jArray = JArray.Parse(jToken.ToString());
foreach (var item in jArray)
public static JToken GetToken(JToken obj, string jsonPath)
return obj.SelectToken(jsonPath, false);