Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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_Serialization_Json.net_Json Deserialization - Fatal编程技术网

C# 在使用JSON.NET反序列化之前,请删除JSON中的非法字符

C# 在使用JSON.NET反序列化之前,请删除JSON中的非法字符,c#,json,serialization,json.net,json-deserialization,C#,Json,Serialization,Json.net,Json Deserialization,我有一个字符串,我想将其反序列化到datatable。因为它在值JSON.NET中有一个双引号,所以无法对其进行反序列化 [{"name":"soham "the" dasgupta"}] 现在我想用替换“the”。请帮忙Replace(“\”,”)显然不起作用。基本上,您需要找到引号之间的字符,并检查它们是否是有效的JSON分隔符 我编写了一个快速而肮脏的函数,它搜索字符串之间的子字符串,并用有效的JSON分隔符匹配它们。如果子字符串不匹配,它将转义引号 注意:这段代码是我想法的一个非常基本

我有一个字符串,我想将其反序列化到datatable。因为它在值
JSON.NET
中有一个双引号,所以无法对其进行反序列化

[{"name":"soham "the" dasgupta"}]

现在我想用
替换
“the”
。请帮忙
Replace(“\”,”)
显然不起作用。

基本上,您需要找到引号之间的字符,并检查它们是否是有效的JSON分隔符

我编写了一个快速而肮脏的函数,它搜索字符串之间的子字符串,并用有效的JSON分隔符匹配它们。如果子字符串不匹配,它将转义引号

注意:这段代码是我想法的一个非常基本的示例,它可能无法处理每种JSON输入

static string FixJson(string input)
{
    var output = input;
    for (var x = 0; x < input.Length; x++)
    {
        if (input[x] != '\"') continue;

        for (var y = x + 1; y < input.Length; y++)
        {
            if (input[y] != '\"') continue;

            var found = false;
            for (var z = y + 1; z < input.Length; z++)
            {
                if (input[z] != '\"') continue;

                var tmp = input.Substring(y + 1, z - y - 1);
                if (tmp.Any(t => t != ' ' && t != ':' && t != ',' && t != '{' && t != '}'))
                {
                    output = output.Replace("\"" + tmp + "\"", "\\\"" + tmp + "\\\"");
                }

                x = y;
                found = true;
                break;
            }

            if (found)
                break;
        }
    }

    return output;
}
静态字符串FixJson(字符串输入)
{
var输出=输入;
对于(var x=0;xt!='&&t!=':'&&t!=','&&t!='{'&&t!='}'))
{
输出=输出。替换(“\”+tmp+“\”,“\ \ \”+tmp+“\ \”);
}
x=y;
发现=真;
打破
}
如果(找到)
打破
}
}
返回输出;
}

如果在双引号之间替换(“\\”,“the”)
或者可以是除“the”之外的其他字符串,该怎么办?这显然是错误的JSON。如果您对代码有任何影响,或者是因为您编写了代码,或者您可以联系这类令人伤心的事情的制作人,您应该修复它,或者让它被修复。任何其他解决方案都会让你抓狂。你的“json”不是有效的json。如果您需要将“the”替换为刚才提到的@croxy,那么您为什么不使用RegEX来执行此操作……并替换“…@dryman”下两个冒号(:)之间的任何内容,我无法控制代码。我也不知道他们可能会在双引号内发送什么单词。输入时,它会返回:
[{“name”:“soham\”the \“dasgupta”}]
此输出将用Newtonsoft.Json.JsonConvert.DeserializeObject反序列化,请提供您试图获得的结果?