Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用json.Net丢弃json对象后的垃圾字符_C#_Json.net - Fatal编程技术网

C# 使用json.Net丢弃json对象后的垃圾字符

C# 使用json.Net丢弃json对象后的垃圾字符,c#,json.net,C#,Json.net,我必须使用一个所谓的web服务,它是由一个哑猴子实现的,在正确的Json响应之后返回一些垃圾。 大概是这样的: { "Property1": 1, "Property2": 2, "Property3": 3 }<?xml version='1.0' ?>Maybe some other gibberish nonsense I wish to discard. { “财产1”:1, “财产2”:2, “财产3”:3 }也许我还想扔掉一些胡言乱语。 现在,我可以搜索“

我必须使用一个所谓的web服务,它是由一个哑猴子实现的,在正确的Json响应之后返回一些垃圾。 大概是这样的:

{
  "Property1": 1,
  "Property2": 2,
  "Property3": 3
}<?xml version='1.0' ?>Maybe some other gibberish nonsense I wish to discard.
{
“财产1”:1,
“财产2”:2,
“财产3”:3
}也许我还想扔掉一些胡言乱语。

现在,我可以搜索
“我知道必须有一种简单而健壮的方法:

    public T ReadTypeAndDiscardTheRest<T>(string json)
    {
        using (var sr = new StringReader(json))
        using (var jsonReader = new JsonTextReader(sr))
        {
            var token = JToken.Load(jsonReader);

            return token.ToObject<T>();
        }
    }

    [Test]
    public void TestJsonDiscarding()
    {
        var json = @"{""Key"":""a"", ""Value"":""n""}<?xml>aaaa";
        var kp = ReadTypeAndDiscardTheRest<KeyValuePair<string, string>>(json);

        Assert.That(kp.Key, Is.EqualTo("a"));
        Assert.That(kp.Value, Is.EqualTo("n"));
    }
public T读取类型和丢弃列表(字符串json)
{
使用(var sr=newstringreader(json))
使用(var jsonReader=newjsontextreader(sr))
{
var-token=JToken.Load(jsonReader);
返回token.ToObject();
}
}
[测试]
public void TestJsonDiscarding()
{
var json=@“{”键“:”a“,”值“:”n“}aaaa”;
var kp=readtypeanddiscardtrest(json);
断言(kp.Key,Is.EqualTo(“a”));
断言(kp.Value,Is.EqualTo(“n”));
}
与往常一样,Json.Net FTW。

您还可以设置为告诉序列化程序忽略反序列化Json对象结束后的任何内容:

var result = JsonConvert.DeserializeObject<Dictionary<string, long>>(json, new JsonSerializerSettings { CheckAdditionalContent = false })
var result=JsonConvert.DeserializeObject(json,新的JsonSerializerSettings{CheckAdditionalContent=false})

奇怪的是,尽管默认值似乎已经是
false,但还是有必要显式地执行此操作,因为.

您可以保证子字符串查看支持的解决方案,它是基于打开/关闭括号的计数。我希望有一个健壮的解决方案。鉴于Json.Net有许多高级读取器,我不知道用其中一个来代替标准的JsonConvert是否可以得到一个JToken或类似的东西。是不是那些代码行导致了你需要显式地将值设置为false。@ScottChamberlain-是的,这个设置与之交互有点尴尬。我感觉
检查后来添加了附加内容
,这样JsonConvert在遇到附加内容时默认会出错,但不会出错。