2

如何像这样反序列化 Web 响应:

[{"_exp":"2014-06-05T23:58:03.859Z","_id":"123","$val":"dabg"}, 
{"_exp":"2014-07-05T23:58:03.859Z","_id":"143","$val":"dabg"}]

在这里,我的具体问题是我无法创建一个变量名称以开头的响应类,$因为 C# 不支持这种类型的命名约定......

4

2 回答 2

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; }
}
于 2014-08-03T20:37:18.397 回答
0

返回一个数组或集合Dictionary<string, object>。您可以使用任何您想要的作为键值,它会根据您的需要进行序列化/反序列化

于 2014-08-03T20:34:06.763 回答