如何像这样反序列化 Web 响应:
[{"_exp":"2014-06-05T23:58:03.859Z","_id":"123","$val":"dabg"},
{"_exp":"2014-07-05T23:58:03.859Z","_id":"143","$val":"dabg"}]
在这里,我的具体问题是我无法创建一个变量名称以开头的响应类,$
因为 C# 不支持这种类型的命名约定......
如何像这样反序列化 Web 响应:
[{"_exp":"2014-06-05T23:58:03.859Z","_id":"123","$val":"dabg"},
{"_exp":"2014-07-05T23:58:03.859Z","_id":"143","$val":"dabg"}]
在这里,我的具体问题是我无法创建一个变量名称以开头的响应类,$
因为 C# 不支持这种类型的命名约定......
您可以手动反序列化到您的模型类中,允许您将 json 属性重命名为有效的 C# 属性。这是一个使用JSON.NET的示例。
List<Model> list = new List<Model>();
JArray array = JArray.Parse(json);
foreach (JObject item in array)
{
list.Add(new Model() {
Exp = item.Value<DateTime>("_exp"),
Id = item.Value<int>("_id"),
Val = item.Value<string>("$val")
});
}
public class Model
{
public DateTime Exp { get; set; }
public int Id { get; set; }
public string Val { get; set ;}
}
另一种选择是将 $val 替换为 _val。属性名称可以以 _ 开头,因此其他两个有效。这将允许自动反序列化为模型。添加的引号和冒号将允许它仅针对属性名称"$val":
,这样您就不会意外替换属性值。
string newJson = json.Replace("\"$val\":", "\"_val\":");
Model[] models = JsonConvert.Deserialize<Model[]>(newJson);
public class Model
{
public string _val { get; set; }
public DateTime _exp { get; set; }
public int _id { get; set; }
}
返回一个数组或集合Dictionary<string, object>
。您可以使用任何您想要的作为键值,它会根据您的需要进行序列化/反序列化