Десериализовать JSON для объекта C# на Windows Phone

Я пытаюсь десериализовать службы данных 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
}

2 ответа

Решение

Нечто подобное должно дать вам правильный результат:

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

Хотя вы можете просто десериализовать напрямую из потока ответов, если хотите пропустить часть MemoryStream

Вы можете попробовать это: http://json.codeplex.com/

Другие вопросы по тегам