在windows phone上将json反序列化为对象c#

在windows phone上将json反序列化为对象c#,c#,json,windows-phone-7,datacontractjsonserializer,C#,Json,Windows Phone 7,Datacontractjsonserializer,我试图将从web服务器接收的json数据服务反序列化为对象。到目前为止,我刚刚设置了一个httpwebrequest,它从服务器的格式化数据中获取json public void DoHttpWebRequest(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.BeginGetResponse(new

我试图将从web服务器接收的json数据服务反序列化为对象。到目前为止,我刚刚设置了一个httpwebrequest,它从服务器的格式化数据中获取json

public void DoHttpWebRequest(string url)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.BeginGetResponse(new AsyncCallback(onGetResponse), request);
}

public void onGetResponse (IAsyncResult asyncResult)
{
    HttpWebRequest myRequest = (HttpWebRequest)asyncResult.AsyncState;
    HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(asyncResult);

    using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
    {
        string results = httpwebStreamReader.ReadToEnd();
        Dispatcher.BeginInvoke(() => textBlock5.Text = results);
    }
    myResponse.Close();
}
这将返回以下数据

{"BodyStyle":"Sports","ChassisNumber":19316,"Colour":"Ivory","Condition":"Showroom","Model":"Silver Wraith","Owners":[{"DateBought":"\/Date(-207269643940+0100)\/","DateSold":"\/Date(-113297981580+0100)\/","ID":651,"Owner":{"Address":null,"Decorations":null,"Email":"jvcuejnj.ldmfkiftvh@wx-sts.net","Forename":"Ismael","ID":637,"Mobile":"008547-4461","Surname":"Anderson","Telephone":"366892-9004","Title":"Mr"}}],"RegistrationNumber":"RB4107  ","Year":1909}
如何使用DataContractJsonSerializer将数据解析为具有以下类的对象

public class CarOwnershipRecord { 
    public int? ID{ get; set; }
    public DateTime? DateBought{ get; set; } 
    public DateTime? DateSold{ get; set; } 
    public Person Owner{ get; set; } 
} 

public class Car { 
    public string BodyStyle{ get; set; } 
    public short? ChassisNumber{ get; set; } 
    public string Colour{ get; set; } 
    public string Condition{ get; set; } 
    public string Model{ get; set; }
    public List<CarOwnershipRecord> Owners{ get; set; } 
    public string RegistrationNumber{ get; set; } 
    public short Year{ get; set; } 
}

public class CarPhoto {
    public string RegistrationNumber{ get; set; }
    public byte[] Photo{ get; set; }
    // The Photo field contains the binary contents of an image file
}
公共类汽车所有权记录{
公共int?ID{get;set;}
公共日期时间?日期购买{get;set;}
公共日期时间?日期出售{get;set;}
公共人物所有者{get;set;}
} 
公车{
公共字符串BodyStyle{get;set;}
公共短?ChassisNumber{get;set;}
公共字符串颜色{get;set;}
公共字符串条件{get;set;}
公共字符串模型{get;set;}
公共列表所有者{get;set;}
公共字符串注册号{get;set;}
公共短年{get;set;}
}
公共级酒店{
公共字符串注册号{get;set;}
公共字节[]Photo{get;set;}
//Photo字段包含图像文件的二进制内容
}

您可以尝试以下方法:

类似的方法应该会给出正确的结果:

byte[] data = Encoding.UTF8.GetBytes(jsonString);
MemoryStream memStream = new MemoryStream(data);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Car));
Car car = (Car) serializer.ReadObject(memStream);

尽管如果您想跳过MemoryStream部分,可以直接从响应流反序列化

谢谢,这就是我要找的。然而,在我的json数据中,我有一个主对象,然后是另一个对象数组,它被定义为
公共列表所有者{get;set;}
。您将如何在同一个json流中反序列化这些数据?只要您正确地映射了所有DTO(汽车、汽车所有权记录和个人),序列化程序就应该只需调用ReadObject()即可为您解决所有问题