C# 使用Newtonsoft.json检测json对象的结尾
我有一个以JSON对象开始的字符串,但在该字符串结束后继续(类似于C# 使用Newtonsoft.json检测json对象的结尾,c#,json,json.net,C#,Json,Json.net,我有一个以JSON对象开始的字符串,但在该字符串结束后继续(类似于{“a”:“fdfsd”,“b”:5}ghresd)。后面的文本可以包含任何字符,JSON可以是JSON允许的任何内容 我想反序列化JSON对象并知道它的结尾,因为我想在之后处理字符串的其余部分,我该如何做,最好使用Newtonsoft.JSON?您可以使用该属性,例如: var json = "{\"a\":\"fdfsd\",\"b\":5}ghresd"; var reader = new JsonTextReader(n
{“a”:“fdfsd”,“b”:5}ghresd
)。后面的文本可以包含任何字符,JSON可以是JSON允许的任何内容
我想反序列化JSON对象并知道它的结尾,因为我想在之后处理字符串的其余部分,我该如何做,最好使用Newtonsoft.JSON
?您可以使用该属性,例如:
var json = "{\"a\":\"fdfsd\",\"b\":5}ghresd";
var reader = new JsonTextReader(new StringReader(json));
reader.SupportMultipleContent = true;
//Read the first JSON fragment
reader.Read();
var serializer = new JsonSerializer();
var result = serializer.Deserialize(reader);
//Or if you have a class to deserialise into:
//var result = serializer.Deserialize<YourClassHere>(reader);
//Line position is where the reader got up to in the JSON string
var extraData = json.Substring(reader.LinePosition);
var json=“{\'a\':\'fdfsd\',\'b\':5}ghresd”;
var reader=newjsontextreader(newstringreader(json));
reader.SupportMultipleContent=true;
//读取第一个JSON片段
reader.Read();
var serializer=new JsonSerializer();
var result=序列化程序。反序列化(读取器);
//或者,如果您有一个类要反序列化到:
//var result=序列化程序。反序列化(读取器);
//行位置是读取器在JSON字符串中到达的位置
var extraData=json.Substring(reader.LinePosition);
如果您的json
有多行代码,则此代码可能无法正常工作:
var extraData=json.Substring(reader.LinePosition);
您可能需要考虑添加额外的检查:
if(reader.LineNumber!=1)
抛出新的NotSupportedException(“不支持多行JSON对象”);
或者您可以使用反射
从私有字段中获取该值:
var charPosition=(int)reader.GetType().GetField(“_charPos”,BindingFlags.Instance | BindingFlags.NonPublic).GetValue(reader);
您可能会发现我前面相关问题的答案很有帮助,尽管在这种情况下我使用的是JavaScript:字符串是否在json对象后面包含}?希望不会。然后可以使用Parse和yourString.SubString(0,yourString.LastIndexOf('}')作为参数。从第一个
{
到}
的最后一个索引获取所有内容如何。。。这可能是您的json以及其他您可以处理的内容。您还可以使用JToken.Parse
验证它是否是有效的json。您可以丢弃结尾后的字符,如所示,但是JsonTextReader
缓冲其内容,而且没有任何机制来报告当前角色的位置。@Tobias Brohl在这个上下文中OP的意思是“原始海报”。检查这个,但看起来很棒