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 ;}
}

もう 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; }
}
于 2014-08-03T20:37:18.397 に答える
0

の配列またはコレクションを返しDictionary<string, object>ます。キー値として必要なものは何でも使用でき、必要に応じてシリアル化/逆シリアル化されます

于 2014-08-03T20:34:06.763 に答える