2011-02-22 70 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

相关问题