C# 以字符串数组的形式访问Json数组
我有一段代码,它从我的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
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在亵渎检查
周围添加了一个静态类。代码中没有太大的差异。