我正在为web api设置审核日志。在这里,我想从json字符串中删除密码属性,因为安全原因。我不想记录登录API的登录密码。
Json /请求有效负载:
{"code":"medics1","username":"admin","password":"password"}
我尝试使用以下代码:
var payload = JArray.Parse(objQueue.payload);
payload.Remove("password");
你已经接近目标了。您只需要对代码进行一点改动即可。
你正在使用JArray
,这用于解析jaz开始和结束与[...]
不是为{...}
而你的json是一个JObject
,意味着它的开始和结束与{...}
所以只需使用JObject
而不是JArray
然后它就可以了
string json = @"{ 'code':'medics1','username':'admin','password':'password'}";
JObject jObject = JObject.Parse(json);
jObject.Remove("password");
string outputJson = jObject.ToString();
输出:(来自调试器)
你应该在这里使用jobject解析。来自newtonsoft网站的代码应该会有所帮助
string json = @"{
'channel': {
'title': 'Star Wars',
'link': 'http://www.starwars.com',
'description': 'Star Wars blog.',
'obsolete': 'Obsolete value',
'item': []
}
}";
JObject rss = JObject.Parse(json);
JObject channel = (JObject)rss["channel"];
channel.Property("obsolete").Remove();
您没有命名对象,因此您可以直接调用
rss.Property(“password”).Remove();
另一种替代方法是反序列化为忽略密码属性然后再次序列化的类。
希望这可以帮助。
你几乎是正确的,只需要根据你的JSON字符串反序列化为一个对象而不是一个数组。
string str = @"{'code':'medics1','username':'admin','password':'password'}";
JObject j = JsonConvert.DeserializeObject<JObject>(str);
j.Remove("password");
Console.WriteLine(j.ToString(Formatting.Indented));
输出:
{
"code": "medics1",
"username": "admin"
}