2011-02-22 18 views
1

我真的很掙扎反序列化ASP.NET json編碼的字符串。反序列化一個PHP json編碼(json_encode)字符串與ASP.NET webservices

我在PHP端使用nusoap和CakePHP 1.3,在web服務端使用mvc.net 4.0,一切正常。然而,我不知道如何傳遞一個複雜的數組作爲web服務的一個參數,所以我想到了將它序列化爲json並傳遞一個簡單的字符串。到目前爲止好...

但我不能爲我的生命去序列化ASP.NET的json_encoded串;

[好,我一直在嘗試,至少在最後兩小時)]

以下是我迄今爲止:

的PHP發送的產品的陣列(產品ID作爲GUID - 發送作爲字符串然後轉換web服務上的一側)和產品數量:

$args['products'] = json_encode($booking['Booking']['prs_products']); 

這是作爲以下json字符串(產品)通過web服務收到:

[{ 「BookingProducts」:{ 「ID」: 「2884f556-67ed-4eb8-98ca-a99dc27a2665」, 「數量」:2}},{ 「BookingProducts」:{ 「ID」:「f57854ba- 0a9b-400b-bea0-bafdcb179b01「,」quantity「:2}},{」BookingProducts「:{」id「:」7ff81128-c33c-4e6c-a33c-3ca40ccfb5d0「,」quantity「:2}}]

然後我嘗試填充BookingProducts列表<>。所述BookingProducts類如下:

public class BookingProducts 
    { 
     public String id { get; set; } 
     public int quantity { get; set; } 

     public BookingProducts() 
     { 
     } 

     public BookingProducts(string id, int quantity) 
     { 
      this.id = id; 
      this.quantity = quantity; 
     } 
    } 

我試圖既[System.Web.Script.Serialization] [2]和Newtonsoft.Json庫如下,但沒有成功:

List<BookingProducts> productsList = new List<BookingProducts>(); 

try 
{ 
    productsList = JsonConvert.DeserializeObject<List<BookingProducts>>((products)); 
} 
catch (Newtonsoft.Json.JsonSerializationException) 
{ 
    productsList = new JavaScriptSerializer().Deserialize<List<BookingProducts>>(products);     
} 

在這兩種我得到一個空產品清單(或序列化例外)。

希望以前有人做過這個,或者可以發現一個明顯的錯誤!

回答

0

你在這裏真正擁有的是包含BookingProducts對象的對象列表。爲了反序列化,就需要有這樣的事情對你的實體:

public class BookingProductsWrapper 
{ 
    public class BookingProductsInner 
    { 
     public string id { get; set; } 

     public int quantity { get; set; } 
    } 

    public BookingProductsInner BookingProducts { get; set; } 
} 

現在你可以使用JavaScriptSerializer反序列化(例如):

System.Web.Script.Serialization.JavaScriptSerializer jsSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
List<BookingProductsWrapper> productsList = jsSerializer.Deserialize<List<BookingProductsWrapper>>(products); 

這將這樣的伎倆。

+0

完美!非常感謝你:) – invosoft 2011-02-23 14:48:16

+0

http://www.newtonsoft.com/json你也可以使用這個庫文件 – jewelhuq 2016-07-16 18:11:05