C# 将字符串转换为字典

C# 将字符串转换为字典,c#,dictionary,C#,Dictionary,我想转换如下字符串: value1: 0.3434, value2: 45.342, value3: 0 查字典 我尝试了两种方法: var dic = JsonConvert.DeserializeObject<Dictionary<string, double>>(mystring); 我认为此项几乎可以工作,但我们在每个键的开头都会得到\r\n 有人有更干净的解决方案吗?您的字符串不是有效的JSON格式字符串 您可以

我想转换如下字符串:

value1: 0.3434,        
value2: 45.342,        
value3: 0       
查字典

我尝试了两种方法:

var dic = JsonConvert.DeserializeObject<Dictionary<string, double>>(mystring);
我认为此项几乎可以工作,但我们在每个键的开头都会得到\r\n


有人有更干净的解决方案吗?

您的字符串不是有效的JSON格式字符串

您可以在字典中编写字符串-值对,如下所示

字符串mystring=@value1:0.3434, 价值2:45.342, 值3:0; 字典dic=新字典; string[]attributes=mystring.Split,; 属性中的foreach字符串 { 字符串[]keyValuePair=s。拆分:; 字符串键=keyValuePair[0]; double value=double.ParsekeyValuePair[1]; dic[键]=值; }
如果它不是JSON,您只需要简单的字符串操作,那么从清理字符串回车和换行符开始,换行符是空白,还有制表符和其他一些。尝试一下:

  var cleanString = new string(mystring.Where(c => !Char.IsWhiteSpace(c)).ToArray());
  var s1 = cleanString.Split(',');
  var s2 = s1.Select(p => p.Split(':'));
  var d = s2.ToDictionary(split => split[0], (split => double.Parse(split[1])));
还是你的一行

  var dic = new string(mystring.Where(c => !Char.IsWhiteSpace(c)).ToArray())
    .Split(',')
    .Select(p => p.Split(':'))
    .ToDictionary(split => split[0], (split => double.Parse(split[1])));

第一个问题不是换行符,而是字符串不是json。你可以修剪键值中的换行符,这个字符串来自哪里?来自剪贴板,或者类似于txt文件之外的内容。使用以下内容代替new[]{,'}:new[]{,,,Environment.NewLine}。这也会将换行符视为分隔符,与RemoveEmptyEntries一起,您只会收到所需的字符串。请记住,如果您的字符串如您所述来自用户源,那么使用单行linq处理它将不会对用户友好,因为如果其中任何一行不可解析,您将得到一个异常,而没有任何关于哪一行不好的信息。
  var dic = new string(mystring.Where(c => !Char.IsWhiteSpace(c)).ToArray())
    .Split(',')
    .Select(p => p.Split(':'))
    .ToDictionary(split => split[0], (split => double.Parse(split[1])));