我从 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
这是我到目前为止所拥有的:
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);
}
这对我有用:
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);
我得到: