Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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数组_C# - Fatal编程技术网

C# 以字符串数组的形式访问Json数组

C# 以字符串数组的形式访问Json数组,c#,C#,我有一段代码,它从我的json文件中读取一个单词数组 public静态字符串[]GetProfanity() { var json=string.Empty; 使用(var fs=File.OpenRead(“profanity.json”)) 使用(var sr=new StreamReader(fs,new UTF8Encoding(false))) json=sr.ReadToEnd(); var profanityJson=JsonConvert.DeserializeObject(js

我有一段代码,它从我的json文件中读取一个单词数组

public静态字符串[]GetProfanity()
{
var json=string.Empty;
使用(var fs=File.OpenRead(“profanity.json”))
使用(var sr=new StreamReader(fs,new UTF8Encoding(false)))
json=sr.ReadToEnd();
var profanityJson=JsonConvert.DeserializeObject(json);
返回亵渎JSON.badwords;
}
这是json

{
  "badwords" : ["bad", "stupid"]
}
我试着在这里访问这个

publicstaticbool亵渎检查(stringinputstring)
{
string[]badWords=GetProfanity();
string checkString=inputString.ToLower();
if(badWords.Any(checkString.Contains))
返回true;
返回false;
}
根据要求,我在这里访问亵渎检查方法

[命令(“echo”)]
[说明(“用户给出什么就说什么”)]
公共异步任务回显(CommandContext ctx,[RemainingText]字符串回显)
{
bool hasProfanity=亵渎过滤器.亵渎检查(echoText);
如果(亵渎)
{
var errMsg=ProfanityFilter.ErrorMessage();
var errSent=await ctx.Channel.SendMessageAsync(嵌入:errMsg).ConfigureAwait(false);
睡眠(3000);
wait ctx.Channel.DeleteMessageAsync(errSent).configureWait(false);
wait ctx.Channel.DeleteMessageAsync(ctx.Message).configureWait(false);
返回;
}
wait ctx.Channel.SendMessageAsync(echoText).ConfigureWait(false);
}
我将其反序列化为

public结构亵渎JSON
{
[JsonProperty(“坏话”)]
公共字符串[]坏字{get;private set;}
}
但是,当我试图在我传递的字符串中搜索任何不好的单词时,什么也没有发生,控制台中没有错误,否则就没有输出。我将其设置为在发现亵渎时向我发送错误消息,但在其当前状态下,当亵渎被传递时,它不会执行任何操作 你可以这样上课:

public class ProfanityJson
{
    [JsonProperty("badwords")]
    public string[] Badwords { get; set; }
}

是这样吗?Json区分大小写。

您的代码似乎是正确的。。。我会以另一种方式编写
GetProfanity()
(当然,我不会在每次有单词传递到
ProfanityCheck
时都重新阅读),但这与您的问题无关。我已经编写了一个最低限度的可测试示例:

public class ProfanityJson
{
    public string[] badwords { get; set; }
}

public static class ProfanityChecker
{
    public static string[] GetProfanity()
    {
        var json = string.Empty;
        using (var fs = File.OpenRead("profanity.json"))
        using (var sr = new StreamReader(fs, new UTF8Encoding(false)))
            json = sr.ReadToEnd();

        var profanityJson = JsonConvert.DeserializeObject<ProfanityJson>(json);

        return profanityJson.badwords;
    }

    public static string[] GetProfanity2()
    {
        using (var sr = new StreamReader("profanity.json"))
        using (var jtr = new JsonTextReader(sr))
        {
            var ser = new JsonSerializer();
            var profanityJson = ser.Deserialize<ProfanityJson>(jtr);
            return profanityJson.badwords;
        }
    }

    public static bool ProfanityCheck(string inputString)
    {
        string[] badWords = GetProfanity2();
        Trace.WriteLine($"Loaded {badWords.Length} bad words");

        string checkString = inputString.ToLower();

        if (badWords.Any(checkString.Contains))
            return true;

        return false;
    }
}

static void Main(string[] args)
{
    Console.WriteLine(ProfanityChecker.ProfanityCheck("badder"));
}
公共类亵渎JSON
{
公共字符串[]坏字{get;set;}
}
公共静态类亵渎检查器
{
公共静态字符串[]GetProfanity()
{
var json=string.Empty;
使用(var fs=File.OpenRead(“profanity.json”))
使用(var sr=new StreamReader(fs,new UTF8Encoding(false)))
json=sr.ReadToEnd();
var profanityJson=JsonConvert.DeserializeObject(json);
返回亵渎JSON.badwords;
}
公共静态字符串[]GetProfanity2()
{
使用(var sr=newstreamreader(“profanity.json”))
使用(var jtr=新的JsonTextReader(sr))
{
var ser=新的JsonSerializer();
var profanityJson=ser.Deserialize(jtr);
返回亵渎JSON.badwords;
}
}
公共静态布尔亵渎检查(字符串输入字符串)
{
string[]badWords=GetProfanity2();
Trace.WriteLine($“Loaded{badWords.Length}bad words”);
string checkString=inputString.ToLower();
if(badWords.Any(checkString.Contains))
返回true;
返回false;
}
}
静态void Main(字符串[]参数)
{
控制台。书写线(亵渎检查。亵渎检查(“badder”);
}

因此,我唯一的想法是,您使用的是
亵渎.json
的“过时”版本。我在
亵渎检查()方法中添加了一点日志。它将转到Visual Studio中的输出窗格。

亵渎JSON类在哪里?您可以通过对匿名对象进行反序列化来返回它。您的类定义可能是错误的。您是否对此进行了调试并检查了数组的值<代码>有害词?似乎它不包含您期望的内容。作为旁注,您不需要在反序列化之前将整个文件读取为字符串。目前,没有任何代码调用
亵渎检查
,因此我不希望出现任何输出/错误。请回答您的问题,并向所有试图帮助我的人发送一封邮件,非常感谢,但从错误输出来看,我忘了将json添加到调试文件夹(请原谅我浪费您的时间)和Newtonsoft。默认情况下json不区分大小写。@Camiloterivento,谁说的不是这样?我的亵渎检查在一个静态类中(我应该提到)那么我应该如何检查某些东西的值(就像你在main中所做的那样)?@AaravNavani在
亵渎检查
周围添加了一个静态类。代码中没有太大的差异。