次のように 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 ;}
}
もう 1 つの方法は、$val を _val に置き換えることです。プロパティ名は _ で開始できるため、他の 2 つは有効です。これにより、モデルへの自動デシリアライズが可能になります。追加された引用符とコロンにより、プロパティ名のみをターゲットにして、"$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>
ます。キー値として必要なものは何でも使用でき、必要に応じてシリアル化/逆シリアル化されます