Преобразование JSON в ExpandoObject в C#

{  
"Jhone":[  
  {  
     "Key":"Employeename",
     "Value":"Jhone"
  },
  {  
     "Key":"Address",
     "Value":[  
        {  
           "Key":"City",
           "Value":"Newyork"
        },
        {  
           "Key":"Country",
           "Value":"USA"
        }
     ]
  }
],
"Mohamed":[  
  {  
     "Key":"Employeename",
     "Value":"Mohamed"
  },
  {  
     "Key":"Address",
     "Value":[  
        {  
           "Key":"City",
           "Value":"Delhi"
        },
        {  
           "Key":"Country",
           "Value":"india"
        }
     ]
  }
]
}

Это мой формат JSON. Как преобразовать в ExpandoObject в С#? Вот мой код как

using System.Dynamic;
using System.Web.Script.Serialization;
using System.IO;
using System.Collections;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

var ictionarys = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(value);
foreach (var item in ictionarys)
{
List<object> itemList = new List<object>();

foreach (var item2 in (ICollection)item.Value)
{
   //Here how to code
}                   
Console.WriteLine(item.Key + "=> " + item.Value);
}

person Veeramani    schedule 06.08.2018    source источник
comment
Не могли бы вы дать больше информации о том, почему вы конкретно хотите ExpandoObject? Если вам просто нужен динамический способ доступа к JSON, пробовали ли вы просто использовать JObject? (dynamic obj = JObject.Parse(value); а потом работать оттуда...)   -  person Jon Skeet    schedule 06.08.2018
comment
Json.NET поддерживает десериализацию напрямую в ExpandoObject, как указано в newtonsoft.com/ json/help/html/SerializationGuide.htm#Dynamic. Ты это пробовал? См., например. Десериализовать динамическую строку Json с помощью Newtonsoft JSON.NET   -  person dbc    schedule 06.08.2018
comment
@ Дейзи Шиптон, спасибо. Но когда мы обращаемся к ключу, это значение равно Json. Как изменить внутренний JObject.parse(значение)   -  person Veeramani    schedule 06.08.2018
comment
var expando = JsonConvert.DeserializeObject<ExpandoObject>(value); просто работает, см. dotnetfiddle.net/ZEPkye для демонстрации. В чем твоя проблема?   -  person dbc    schedule 06.08.2018
comment
Боюсь, я не понимаю, что вы имеете в виду в своем комментарии. Да, вам нужно найти объект, который имеет свойство Key со значением Address, из-за того, как структурирован ваш JSON... вы можете легко создать Dictionary<string, JObject>, если это более полезно.   -  person Jon Skeet    schedule 07.08.2018


Ответы (1)


Возможно, вы можете использовать этот метод расширения

public static ExpandoObject Expando(this IEnumerable<KeyValuePair<string, object>> dictionary)
{
    var expando = new ExpandoObject();
    var expandoDic = (IDictionary<string, object>)expando;
    foreach (var item in dictionary)
    {
        expandoDic.Add(item);
    }
    return expando;
}

Метод возвращает ExpandoObject с ключом, списком значений

person Sidron    schedule 06.08.2018
comment
Спасибо. Но мы хотим, чтобы словарь‹name,expandoObejct› как словарь‹Mohamed,ExpandoObject›, словарь‹Jhon,ExpandoOject› вот так - person Veeramani; 06.08.2018
comment
В вашем коде значение словаря как значение Json, которое мы хотим использовать в качестве ExpandoObject? - person Veeramani; 06.08.2018