使用ASP.NET Web服务反序列化PHP json编码(json_encode)字符串

使用ASP.NET Web服务反序列化PHP json编码(json_encode)字符串,asp.net,asp.net-mvc,.net-4.0,webservice-client,nusoap,Asp.net,Asp.net Mvc,.net 4.0,Webservice Client,Nusoap,我真的很难在ASP.NET中反序列化PHP json编码的字符串 我在PHP端使用和CakePHP 1.3,在web服务端使用mvc.net 4.0,一切都很好。但是,我不知道如何将复杂数组作为webservice的一个参数传递,因此我想到将其序列化为json并传递一个简单字符串。到目前为止还不错 但我无法在ASP.NET中反序列化json_编码的字符串[好吧,我至少已经尝试了两个小时;] 以下是我到目前为止的情况: PHP发送一个产品数组,产品id作为GUID-作为字符串发送,然后在web服务

我真的很难在ASP.NET中反序列化PHP json编码的字符串

我在PHP端使用和CakePHP 1.3,在web服务端使用mvc.net 4.0,一切都很好。但是,我不知道如何将复杂数组作为webservice的一个参数传递,因此我想到将其序列化为json并传递一个简单字符串。到目前为止还不错

但我无法在ASP.NET中反序列化json_编码的字符串[好吧,我至少已经尝试了两个小时;]

以下是我到目前为止的情况:

PHP发送一个产品数组,产品id作为GUID-作为字符串发送,然后在web服务端转换,产品数量:

$args['products'] = json_encode($booking['Booking']['prs_products']);
Web服务接收到以下json字符串产品:

$args['products'] = json_encode($booking['Booking']['prs_products']);
[{预订产品:{id:2884f556-67ed-4eb8-98ca-a99dc27a2665,数量:2},{预订产品:{id:f57854ba-0a9b-400b-bea0-bafdcb179b01,数量:2},{预订产品:{id:7ff81128-c33c-4e6c-a33c-3ca40ccfb5d0,数量: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]和以下库,但没有成功:

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

try
{
  productsList = JsonConvert.DeserializeObject<List<BookingProducts>>((products));
}
catch (Newtonsoft.Json.JsonSerializationException)
{
  productsList = new JavaScriptSerializer().Deserialize<List<BookingProducts>>(products);                   
}
在这两种情况下,我都会得到一个空产品列表或序列化异常


希望有人曾经这样做过,或者可以发现一个明显的错误

这里真正拥有的是包含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);

那就行了。

太好了!非常感谢你: