我有一个长字符串,我只需要取出{
和}
之间的子串,并将其转换为Json对象
此字符串
sys=t85,fggh{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"} dsdfg x=565,dfg
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}dfsdfg567
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}sdfs
我里面有垃圾,所以我需要在{
和}
我的代码在这里,但是我被卡住了,我无法删除已经使用的数据。
List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();
int lenght = -1;
while (temp.Length>3)
{
lenght = temp.IndexOf("}") - temp.IndexOf("{");
temp=temp.Substring(temp.IndexOf("{"), lenght+1);
temp.Remove(temp.IndexOf("{"), lenght + 1);
var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(temp);
AllFiles.Add(result);
}
答案 0 :(得分:2)
或者使用正则表达式,你可以得到这样的字符串:
var regex = new Regex("{([^}]*)}");
var matches = regex.Matches(str);
var list = (from object m in matches select m.ToString().Replace("{",string.Empty).Replace("}",string.Empty)).ToList();
var jsonList = JsonConvert.SerializeObject(list);
str 变量,其中包含您在问题中提供的字符串。
答案 1 :(得分:2)
您可以使用正则表达式,但我要做的是使用.split ('{')
拆分为部分,跳过第一部分,然后使用.split('})查找每个部分的第一部分。
您可以使用LINQ
执行此操作var data = temp
.Split('{')
.Skip(1)
.Select(v => v.Split('}').FirstOrDefault());
答案 2 :(得分:1)
如果我理解正确,你只想在大括号之间提取任何内容并忽略其他任何内容。
以下正则表达式应该允许您提取该信息:
{[^}]*}
(一个大括号,后跟任何不是大括号的东西,然后是大括号)
您可以提取所有实例,然后使用以下内容对其进行反序列化:
using System.Text.RegularExpressions;
...
List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();
foreach(Match match in Regex.Matches(temp, "{[^}]*}"))
{
var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(match.Value);
AllFiles.Add(result);
}