如何反序列出这样的Web响应:
[{"_exp":"2014-06-05T23:58:03.859Z","_id":"123","$val":"dabg"},
{"_exp":"2014-07-05T23:58:03.859Z","_id":"143","$val":"dabg"}]
这里我的具体问题是我无法创建一个响应类,其变量名称以$
开头,因为C#不支持这种类型的命名约定...
答案 0 :(得分:2)
您可以手动反序列化到模型类中,允许您将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; }
}
答案 1 :(得分:0)
返回Dictionary<string, object>
的数组或集合。您可以使用任何您想要的键作为键值,它将根据需要进行序列化/反序列化