如何反序列化包含多维数组的json对象?

Posted

技术标签:

【中文标题】如何反序列化包含多维数组的json对象?【英文标题】:How to deseralize json object that contains multidimensional array? 【发布时间】:2012-11-08 07:36:49 【问题描述】:

我需要一些关于将包含多维数组的 JSON 对象转换为我的类的帮助。我试图反序列化 json 对象但失败了。 JsonMaclar 类对象为空。请帮忙。

脚本代码;

var allFields = new Array();
allFields.push(
                        BirinciKatilimciId: birinciKatilimciId.val(),
                        IkinciKatilimciId: ikinciKatilimciId.val(),
                        BirincininSkoru: birincininSkoru.val(),
                        IkincininSkoru: ikincininSkoru.val(),
                        MacSayisi: macSayisi.val(),
                        MacSuresi: macinSuresi.val(),
                        MacinOynanmaSaati: macinOynanmaSaati.val(),
                        Hukmen: hukmen.is(':checked'),
                        RatingeDahil: ratingeDahil.is(':checked'),
                        MaclarTablosundaGoster: maclarTablosundaGoster.is(':checked'),
                        MacinTarihi: macinTarihi.val()
                    );

$("#<%=btnMaclariKaydet.ClientID %>").click(function () 

            var jsonText = JSON.stringify(
                arrayAllMaclar: allFields
            );
            $('#<%= hfMaclar.ClientID %>').val(jsonText);

        );

c#代码;

protected void btnMaclariKaydet_Click(object sender, EventArgs e)
    
        javascriptSerializer ser = new JavaScriptSerializer();
        JsonMaclar turnuvaMaclar = ser.Deserialize<JsonMaclar>(hfMaclar.Value);
    
public class JsonMaclar 
    List<JsonMac> arrayAllMaclar  get; set;     


public class JsonMac 
    String BirinciKatilimciId  get; set; 
    String IkinciKatilimciId  get; set; 
    String BirincininSkoru  get; set; 
    String IkincininSkoru  get; set; 
    String MacSayisi  get; set; 
    String MacSuresi  get; set; 
    String MacinOynanmaSaati  get; set; 
    String Hukmen  get; set; 
    String RatingeDahil  get; set; 
    String MaclarTablosundaGoster  get; set; 
    String MacinTarihi  get; set; 

【问题讨论】:

【参考方案1】:

我建议您使用JSON.NET。它是一个开源库,可将您的 c# 对象序列化和反序列化为 json 和 Json 对象为 .net 对象...

序列化示例:

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[]  "Small", "Medium", "Large" ;

string json = JsonConvert.SerializeObject(product);
//
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

Json.NET 4.5 Release 8 – 多维数组支持,Unicode 改进 Json.NET 现在支持序列化和反序列化多维数组。如果您的某个类型具有多维数组属性 It Just Works™,则您无需执行任何操作。

string[,] famousCouples = new string[,]
  
     "Adam", "Eve" ,
     "Bonnie", "Clyde" ,
     "Donald", "Daisy" ,
     "Han", "Leia" 
  ;

string json = JsonConvert.SerializeObject(famousCouples, Formatting.Indented);
// [
//   ["Adam", "Eve"],
//   ["Bonnie", "Clyde"],
//   ["Donald", "Daisy"],
//   ["Han", "Leia"]
// ]

string[,] deserialized = JsonConvert.DeserializeObject<string[,]>(json);

Console.WriteLine(deserialized[3, 0] + ", " + deserialized[3, 1]);
// Han, Leia

【讨论】:

以上是关于如何反序列化包含多维数组的json对象?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ProtoBuf-Net,如何(反)序列化多维数组?

使用Jettison的多维数组

将多维表单数据序列化为 JSON 对象数组以使用 application/json

如何将多维数组转换为json对象[关闭]

redis怎么存数组和获取数组?

如何过滤多维 JSON 对象