我有一个以json对象开头的字符串,但在字符串的结尾之后一直存在(类似于{"a":"fdfsd","b":5}ghresd
)。之后的文本可以包含任何字符,而json可以是json允许的任何内容。
我想反序列化json对象并知道它在哪里结束,因为我想在以后处理其余的字符串,我该怎么做,最好使用Newtonsoft.Json?
答案 0 :(得分:2)
您可以使用SupportMultipleContent
属性,例如:
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);
答案 1 :(得分:2)
如果您的json
有多行,则这段代码可能无法正常工作:
var extraData = json.Substring(reader.LinePosition);
您可能需要考虑添加其他支票:
if(reader.LineNumber != 1)
throw new NotSupportedException("Multiline JSON objects are not supported.");
或者您可以使用Reflection
从私有字段中获取该值:
var charPosition = (int)reader.GetType().GetField("_charPos", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(reader);