我正在为Web api设置审核日志。由于安全原因,在这里我想从json字符串中删除password属性。我不想登录登录API的登录密码。
Json /请求有效载荷:
{"code":"medics1","username":"admin","password":"password"}
我尝试了以下代码:
var payload = JArray.Parse(objQueue.payload);
payload.Remove("password");
答案 0 :(得分:1)
您应在此处使用jobject解析。牛顿软件网站的以下代码应该会有所帮助
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();
另一种替代方法是反序列化为忽略密码属性的类,然后再次对其进行序列化。
希望这会有所帮助。
答案 1 :(得分:1)
您几乎是正确的,只是必须反序列化为对象而不是基于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"
}
答案 2 :(得分:1)
您无法实现目标。您只需对代码做一点改动。
您正在使用JArray
,这用于解析以[...]
开头和结尾的json,而不是{...}
您的json是JObject
,表示它的开头和结尾为{...}
所以只需使用JObject
而不是JArray
,它就可以使用
string json = @"{ 'code':'medics1','username':'admin','password':'password'}";
JObject jObject = JObject.Parse(json);
jObject.Remove("password");
string outputJson = jObject.ToString();
输出:(来自调试器)