我有一个像下面这样的对象在C#中被反序列化。我想知道如何解析它。我尝试关注this example here,但我很难理解如何让我的课程识别每个对象的关键字(2
和下面的3
)。
下面的JSON字符串基本上代表2个事务。我想将每个事务表示转换为Transaction对象,并将其放入Transaction对象数组中。
{
"2": {
"id": "2",
"user_id": "59",
"offer_id": "1234"
},
"3": {
"id": "3",
"user_id": "59",
"offer_id": "1234"
}
}
以下是我的课程:
public class Transactions
{
// what goes here since the "key" field is always different?
}
public class Transaction
{
public int id { get; set; }
public int user_id { get; set; }
public int offer_id { get; set; }
}
答案 0 :(得分:2)
可以使用JSON.Net库中的JObject来完成。
var transactions = JObject.Parse(json).PropertyValues()
.Select(o => o.ToObject<Transaction>());
这应该可以解决问题。
答案 1 :(得分:0)
使用JavaScriptSerializer
,您可以通过反序列化为Dictionary<string, Transaction>
来解决此问题。如果需要,可以从那里轻松地将其转换为数组。
示例代码:
string json = @"
{
""2"": {
""id"": ""2"",
""user_id"": ""59"",
""offer_id"": ""1234""
},
""3"": {
""id"": ""3"",
""user_id"": ""59"",
""offer_id"": ""1234""
}
}";
var serializer = new JavaScriptSerializer();
var dict = serializer.Deserialize<Dictionary<string, Transaction>>(json);
var transactions = dict.Select(kvp => kvp.Value).ToArray();
foreach (Transaction t in transactions)
{
Console.WriteLine(string.Format(
"id: {0}, user_id: {1}, offer_id: {2}", t.id, t.user_id, t.offer_id));
}