我正在使用Web服务来获取响应,并发现Json的格式不正确。请参阅以下示例。
对象结构是:
public class Action
{
public string serialNumber { get; set; }
public string method1 { get; set; }
public string recipient1 { get; set; }
public string notifyon1 { get; set; }
}
我们有一个字段“recipient1”,其值为“1 @ test.com,2 @ test.com,3 @ test.com”,然后api响应json,如下所示。
坏json回应:
{"serialNumber": "2471",
"method1": "email",
"recipient1": "1@test.com",
"2@test.com": "",
"3@test.com": "",
"notifyon1": "warning",
"critical": ""}
应该是:
{"serialNumber": "2471",
"method1": "email",
"recipient1": "1@test.com,2@test.com,3@test.com",
"notifyon1": "warning,critical"}
首先,我尝试使用正则表达式将这些电子邮件值转换为正确的字段。但后来我发现包含逗号“,”的所有值都发生了。例如上面样本中的“Notifyon1”。
现在我在想是否有任何方法可以解析json,当它找到“2@test.com”然后检查对象,如果它不是属性,则将其作为值放入前一个字段“收信地址“ 。
感谢您的帮助。
答案 0 :(得分:0)
无论属性中的空值如何,这都将起作用。
using Newtonsoft.Json;
private Action HandleBadJson(string badJson)
{
Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(badJson);
Action act = new Action();
List<string> propertyNames = act.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Select(p => p.Name).ToList();
string currentProperty = "";
foreach (var keyValPair in dictionary)
{
if (propertyNames.Contains(keyValPair.Key))
{
currentProperty = keyValPair.Key;
act.GetType().GetProperty(currentProperty).SetValue(act, keyValPair.Value);
continue;
}
else
{
var currentValue = act.GetType().GetProperty(currentProperty).GetValue(act, null);
string value = currentValue + "," + keyValPair.Key;
value = value.Trim(',');
act.GetType().GetProperty(currentProperty).SetValue(act, value);
}
}
return act;
}