如何将从 Dynamics CRM 收到的字符串转换为 C# 中的字典
How to Convert a string received from dynamics CRM to Dictionary in C#
我是动态 CRM 开发人员,我正在编写一个代码活动,我在其中接收格式如下的字段值:
[{"name":"Sherlock","id":"a10ef25"}]
我想将此值转换为字典格式。我正在考虑使用 ToDictionary()
方法,从值中删除 [] 后将其转换为字符串,如下所示:
{"name":"Sherlock","exid":"a10ef25"}
我需要包含“id”的 Key 的值,但字符串中的对数有时可以超过 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);
我无法再前进了。有人可以帮忙吗?
这是JSON格式
使用 Json 转换器
var value= @"{""name"":""Sherlock"",""id"":""a10ef25"",""date"":""25062019""}";
var dict= JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
这看起来与 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);
要获取包含 id 的键,您可以操作集合,例如:
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
还有一个解决方案
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);
我是动态 CRM 开发人员,我正在编写一个代码活动,我在其中接收格式如下的字段值:
[{"name":"Sherlock","id":"a10ef25"}]
我想将此值转换为字典格式。我正在考虑使用 ToDictionary()
方法,从值中删除 [] 后将其转换为字符串,如下所示:
{"name":"Sherlock","exid":"a10ef25"}
我需要包含“id”的 Key 的值,但字符串中的对数有时可以超过 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);
我无法再前进了。有人可以帮忙吗?
这是JSON格式 使用 Json 转换器
var value= @"{""name"":""Sherlock"",""id"":""a10ef25"",""date"":""25062019""}";
var dict= JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
这看起来与 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);
要获取包含 id 的键,您可以操作集合,例如:
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
还有一个解决方案
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);