我正在接受HttpRequest并将其读取为字符串
var body = request.Content.ReadAsStringAsync().Result;
这个正文给了我一个如下所示的字符串:
"To=Jim&From=Dan+Bailey"
我想序列化body以自动绑定到看起来像
的对象public class Letter
{
[JsonProperty("To")]
public string To { get; set; }
[JsonProperty("From")]
public string From { get; set; }
}
有什么想法吗?我尝试使用JsonSerializer和Newtonsoft.Json.Convert,但两者都需要不同的格式
答案 0 :(得分:3)
Json反序列化器只适用于Json字符串
您可以使用实用程序ParseQueryString直接将查询字符串转换为NameValueCollection
var body = request.Content.ReadAsStringAsync().Result;
var parameters = HttpUtility.ParseQueryString(body);
对于大多数用途,使用NameValueCollection应该足够了,但是如果你仍然需要一个强类型对象,我建议使用反射,或者首先序列化为json字符串,然后使用Newtonsoft deserializer
var dict = new Dictionary<string, string>();
foreach (var key in parameters.Keys)
{
dict.Add(key, parameters[key]);
}
var json = JsonConvert.SerializeObject(dict);
var obj = JsonConvert.DeserializeObject<Letter>(json);
答案 1 :(得分:1)
你拥有的不是JSON,但很可能是一个简单的html参数字符串。根据您的班级Letter
的外观,看起来格式是固定的。
我猜你可以用Regex做到这一点:
var match = Regex.Match("To=Jim&From=Dan+Bailey", "To=(?<To>[^&]+)&From=(?<From>[^&]+)");
var letter = new Letter() { To = match.Groups["To"].Value, From = match.Groups["From"].Value };