将字符串转换为键值对<string, string>

问题描述 投票:0回答:1

我从 websocket 接收一些数据,这些数据似乎被格式化为带有键值对的 Id,其中包含一个字符串和一些格式为:ID[type,json] 的序列化 JSON。

举个例子:

42["login",{ "requestId":null,"loginToken":"fwadff","type":"display","clientGroup":null,"features":[],"force":true}]

所以在这种情况下: 42 是消息 ID login 是 KVP 中的第一个字符串,指示 JSON 类型 JSON 是第二个字符串

因此 JSON 部分的结构将会改变,我需要使用第一个字符串来确定如何反序列化 JSON。

我可以使用一些字符串函数将 KVP 与消息 ID 隔离,然后转换 KVP,但我不能使用 Split(','),因为它还会拆分 JSON 中的所有元素。

由于这看起来像一个通用结构,我认为可能有一种更简单的方法来做到这一点,但我可能不知道。

将此数据转换为 KVP 甚至 KVP[string,dynamic] 的最简单方法是什么?

这是我到目前为止所拥有的:

        string test = "42[\"login\",{ \"requestId\":null,\"loginToken\":\"fwadff\",\"type\":\"display\",\"clientGroup\":null,\"features\":[],\"force\":true}]";

        // EXTRACT KEY VALUE PAIR FROM STRING
        int startIndex = test.IndexOf('[');
        int endIndex = test.LastIndexOf(']');

        if (startIndex > -1 && endIndex > -1)
        {
            // EXTRACT KEY VALUE PAIR
            string kvp = test.Substring(startIndex, ((endIndex - startIndex)+1));
            string id = test.Substring(0, startIndex);

            Console.WriteLine(kvp);

            var result = kvp.Trim('[', ']')
            .Split(new[] { ',' }, 2);                
        }
c# key-value
1个回答
0
投票

这对我有用:

string test = "42[\"login\",{ \"requestId\":null,\"loginToken\":\"fwadff\",\"type\":\"display\",\"clientGroup\":null,\"features\":[],\"force\":true}]";
Regex regex = new Regex(@"\d+(\[.*\])$");

var output = (JArray)Newtonsoft.Json.JsonConvert.DeserializeObject(regex.Match(test).Groups[1].Value);

我得到:

© www.soinside.com 2019 - 2024. All rights reserved.