C# JavaScriptSerializer.Deserialize提供空字段

C# JavaScriptSerializer.Deserialize提供空字段,c#,json,wcf,C#,Json,Wcf,我将以下JSON发送到一个WCF服务,该服务接受流作为参数 {"ReservationStream": {"clientFirstName":"Abe", "clientLastName":"Lincoln", "clientPhone":"0544944860", "clientEmail":"abe@mail.com", "pickupLocationID":"3699", "pickupAddressString":"JFK Airport Terminal 1", "pickupFlig

我将以下JSON发送到一个WCF服务,该服务接受流作为参数

{"ReservationStream":
{"clientFirstName":"Abe",
"clientLastName":"Lincoln",
"clientPhone":"0544944860",
"clientEmail":"abe@mail.com",
"pickupLocationID":"3699",
"pickupAddressString":"JFK Airport Terminal 1",
"pickupFlightNumber":"LY001",
"pickupAirline":"El Al",
"pickupAirportName":"John F Kennedy Intl",
}
}
在调试器中,stream变量按预期显示所有值。我想反序列化为一个定义如下的类:

public class ReservationStream
{
        public String clientFirstName { get; set; }
        public String clientLastName { get; set; }
        public String clientPhone { get; set; }
        public String clientEmail { get; set; }
        public String pickupLocationID { get; set; }
        public String pickupAddressString { get; set; }
        public String pickupFlightNumber { get; set; }
        public String pickupAirline { get; set; }
        public String pickupAirportName { get; set; }
}
当我打电话时

 JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            ReservationStream structuredReservations = javaScriptSerializer.Deserialize<ReservationStream>(strJSON);
JavaScriptSerializer JavaScriptSerializer=new JavaScriptSerializer();
ReservationStream structuredReservations=javaScriptSerializer.Deserialize(strJSON);

不会引发异常,但所有字段都有空值。我的错误在哪里?

我认为这是因为您的JSON对象嵌套在
ReservationStream
标记中

尝试一下:

{
“clientFirstName”:“Abe”,
“clientLastName”:“Lincoln”,
“客户电话”:“0544944860”,
“客户邮件”:abe@mail.com",
“pickupLocationID”:“3699”,
“pickupAddressString”:“肯尼迪机场1号航站楼”,
“pickupFlightNumber”:“LY001”,
“皮卡航空公司”:“El Al”,
“皮卡机场名称”:“约翰·肯尼迪国际”

}

您试图反序列化包含ReservationStream对象而非ReservationStream对象本身的对象

解决此问题的一种方法是创建一个包含ReservationStream的包装器类,并使用以下方法进行反序列化:

public class WrapperClass
{
    public ReservationStream ReservationStream { get; set; }
}

WrapperClass wrapperClass = serializer.Deserialize<WrapperClass>(strJSON);
公共类包装器类
{
public ReservationStream ReservationStream{get;set;}
}
WrapperClass WrapperClass=序列化程序.反序列化(strJSON);

我曾经遇到过同样的问题,我删除了javaScriptSerializer,并直接使用如下方法参数

public static string UpdateTemplateProperties(TemplateProperties templateProperties)
{
    var x = templateProperties.Something
}
我有你想要的javascript对象结构


只需确保参数的名称和javascript对象文字中的第一个对象名称相同即可

能否显示接收ajax调用的方法的代码?asp.net数据将自动反序列化,需要调用javaScriptSerializer方法。我与他具有相同的结构,并且工作正常,但我没有使用javaScriptSerializer