将格式 "property=whatever&property2=whatever" 的字符串反序列化为对象
Deserializing string of format "property=whatever&property2=whatever" to an object
我正在获取一个 HttpRequest 并将其读取为一个字符串
var body = request.Content.ReadAsStringAsync().Result;
这个正文给我一个如下所示的字符串:
"To=Jim&From=Dan+Bailey"
我想序列化正文以自动绑定到看起来像
的对象
public class Letter
{
[JsonProperty("To")]
public string To { get; set; }
[JsonProperty("From")]
public string From { get; set; }
}
有什么想法吗?我尝试使用 JsonSerializer 和 Newtonsoft.Json.Convert 但两者都需要不同的格式
您拥有的不是 JSON,而很可能是一个简单的 html 参数字符串。考虑到您的 class 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 };
Json 反序列化器仅适用于 Json 字符串
您可以直接使用实用程序将查询字符串转换为 NameValueCollection ParseQueryString
var body = request.Content.ReadAsStringAsync().Result;
var parameters = HttpUtility.ParseQueryString(body);
对于大多数用途,使用 NameValueCollection 就足够了,但如果您仍然需要强类型对象,我建议使用反射,或者先序列化为 json 字符串,然后使用 Newtonsoft 反序列化器
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);
我正在获取一个 HttpRequest 并将其读取为一个字符串
var body = request.Content.ReadAsStringAsync().Result;
这个正文给我一个如下所示的字符串:
"To=Jim&From=Dan+Bailey"
我想序列化正文以自动绑定到看起来像
的对象public class Letter
{
[JsonProperty("To")]
public string To { get; set; }
[JsonProperty("From")]
public string From { get; set; }
}
有什么想法吗?我尝试使用 JsonSerializer 和 Newtonsoft.Json.Convert 但两者都需要不同的格式
您拥有的不是 JSON,而很可能是一个简单的 html 参数字符串。考虑到您的 class 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 };
Json 反序列化器仅适用于 Json 字符串
您可以直接使用实用程序将查询字符串转换为 NameValueCollection ParseQueryString
var body = request.Content.ReadAsStringAsync().Result;
var parameters = HttpUtility.ParseQueryString(body);
对于大多数用途,使用 NameValueCollection 就足够了,但如果您仍然需要强类型对象,我建议使用反射,或者先序列化为 json 字符串,然后使用 Newtonsoft 反序列化器
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);