Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 从字符串中删除子字符串的最佳方法_C#_String - Fatal编程技术网

C# 从字符串中删除子字符串的最佳方法

C# 从字符串中删除子字符串的最佳方法,c#,string,C#,String,我有几个字符串如下: string x = "[{\"Name\":\"property1\",\"Value\":true},{\"Name\":\"FOO\",\"Value\":12345ddddeeee},{\"Name\":\"property3\",\"Value\":false}]"; 并且需要移除 "{\"Name\":\"FOO\",\"Value\":12345ddddeeee}" 从原始字符串。但是,FOO name+值可以位于字符串中的任何位置。它不一定必须介于属性

我有几个字符串如下:

 string x = "[{\"Name\":\"property1\",\"Value\":true},{\"Name\":\"FOO\",\"Value\":12345ddddeeee},{\"Name\":\"property3\",\"Value\":false}]";
并且需要移除

"{\"Name\":\"FOO\",\"Value\":12345ddddeeee}"
从原始字符串。但是,FOO name+值可以位于字符串中的任何位置。它不一定必须介于属性1和属性3之间。从与x格式相同的通用字符串中删除它的最佳方法是什么


FOO的值可能不同

请验证并修复json。你可以用像

如果您可以自己解析字符串并搜索Name
FOO
,那么这可能是最好的方法。但是您必须处理所有与解析相关的任务,例如json字符串中不必要的空格

如果这个
字符串x
不是太大(我让您自己进行分析,以确定什么对您的程序来说太大),那么我建议将
字符串
反序列化到一个
列表
,删除不必要的数据并重新序列化可能很容易。请参阅下面给出的示例代码。您需要调用
ParseString()
方法来完成任务。请注意,您必须根据您的需要进行更新

public class ParseMyDateItemList
{
    public static void ParseString()
    {
        string x = "[{\"Name\":\"property1\",\"Value\":true},{\"Name\":\"FOO\",\"Value\":\"12345ddddeeee\"},{\"Name\":\"property3\",\"Value\":false}]";
        var dataItems = Newtonsoft.Json.JsonConvert.DeserializeObject<IList<MyDataItem>>(x);
        var resultDataItems = dataItems.Except(dataItems.Where(t => t.Name.ToLower() == "foo")).ToList();
        var resultJson = Newtonsoft.Json.JsonConvert.SerializeObject(resultDataItems);

    }
}

public class MyDataItem
{
    public string Name { get; set; }
    public object Value { get; set; }
}
公共类ParseMyDateItemList
{
公共静态void ParseString()
{
字符串x=“[{\'Name\':\'property1\',\'Value\':true},{\'Name\':\'FOO\',\'Value\':\'12345ddddeeee\',{\'Name\':\'property3\',\'Value\':false}”;
var dataItems=Newtonsoft.Json.JsonConvert.DeserializeObject(x);
var resultDataItems=dataItems.Except(dataItems.Where(t=>t.Name.ToLower()==“foo”).ToList();
var resultJson=Newtonsoft.Json.JsonConvert.SerializeObject(resultDataItems);
}
}
公共类MyDataItem
{
公共字符串名称{get;set;}
公共对象值{get;set;}
}
我想出了一个办法:

string tobesearched = "{\"Name\":\"FOO\",\"Value\":";
string k = x.Substring(x.IndexOf(tobesearched));

string final = x.Replace(x.Substring(x.IndexOf(tobesearched), x.IndexOf(tobesearched) + k.IndexOf("}") - x.IndexOf(tobesearched)),"")

抱歉,FOO can vary的值该字符串的哪些方面使其具有删除价值?你如何识别它?通过名字?是的,只是通过“名字”,也就是FOO。我需要删除之后的值,只是解析JSON是不可能的?不,这不是不可能的。我不能更改字符串。有些值不在引号中,因此不是正确的JSON格式。原始问题中的字符串是正确的,您可以看到一些值没有被引用。我试图通过处理
反序列化对象
中的解析错误来更新上面的答案。但看起来Newtonsoft并没有按照您的案例中的要求进行操作。所以我认为我的答案是不正确的。