如何使用JavaScriptSerializer解析带有数字键的JSON对象
本文关键字:数字 JSON 对象 何使用 JavaScriptSerializer | 更新日期: 2023-09-27 18:25:58
我有一个像下面这样的对象要在C#中反序列化。我想知道如何解析它。我试着在这里遵循这个例子,但我被如何让我的类识别每个对象的键(下面的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; }
}
可以使用JSON.Net库中的JObject来完成。
var transactions = JObject.Parse(json).PropertyValues()
.Select(o => o.ToObject<Transaction>());
这应该奏效。
使用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));
}
我最终发现,将键值对从Javascript序列化到C#是不可能的。
我已经更改了代码,并在JS中创建了一个普通的对象数组,并将其发送到服务器。
但是可以将键值对从字符串变量解析为C#中的Dictionary或KeyValuePair<x、 x>
还可以使用C#构建一个键值对,并将其转换为JSON或JS