Как преобразовать строку, полученную из Dynamics CRM, в словарь в C# - PullRequest
0 голосов
/ 09 июля 2020

Я разработчик динамической CRM-системы и пишу код активности, в котором я получаю значение поля в формате, например:

[{"name":"Sherlock","id":"a10ef25"}] 

Я хочу преобразовать это значение в формат словаря. Я думаю об использовании метода ToDictionary() после удаления [] из значения, преобразовав его в строку следующим образом:

{"name":"Sherlock","exid":"a10ef25"}

Мне нужно значение Key, которое содержит «id», но количество пар в строке может быть больше 2, а также иногда, например:

{"name":"Sherlock","id":"a10ef25","date":"25062019"}.

var value=[{"name":"Sherlock","id":"a10ef25"}]; // i'm receiving it from crm & converting to string
var dict=value.Substring(1.value.Length-1);

Я не могу go переслать, чем это. может кто-нибудь помочь?

Ответы [ 3 ]

4 голосов
/ 09 июля 2020

Это выглядит примерно как json, поэтому вы можете попробовать просто десериализовать его до коллекции Dictionary<string, string>. С Newtonsoft Json. NET это будет выглядеть так:

string value = "[{\"name\":\"Sherlock\",\"id\":\"a10ef25\"}]"; // the original value, no need to trim/remove
var collectionOfDicts = JsonConvert.DeserializeObject<List<Dictionary<string,string>>>(value);

Чтобы получить ключ, содержащий идентификатор, вы можете манипулировать коллекцией, например, следующим образом:

var id = collectionOfDicts
    .FirstOrDefault()
    ?.Where(kvp => kvp.Key.Contains("id", StringComparison.InvariantCultureIgnoreCase))
    .Select(kvp => kvp.Value)
    .FirstOrDefault();

UPD

Другой вариант - использовать LINQ to JSON из той же библиотеки:

var id = JArray.Parse(value)
    .Descendants()
    .OfType<JProperty>()
    .FirstOrDefault(p => p.Name.Contains("id", StringComparison.InvariantCultureIgnoreCase))
    ?.Value
1 голос
/ 09 июля 2020

Еще одно решение

var value ="[{ \"name\":\"Sherlock\",\"id\":\"a10ef25\"}]".TrimStart('[').TrimEnd(']');
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
var id = dict["id"]; // or dict.TryGetValue("id", out string id);
0 голосов
/ 09 июля 2020

Это JSON формат Используйте Json Конвертер

 var value= @"{""name"":""Sherlock"",""id"":""a10ef25"",""date"":""25062019""}";
           
var dict= JsonConvert.DeserializeObject<Dictionary<string, string>>(value); 
...