2015-07-08 2 views
-2

У меня есть проект, который использует данные в формате JSON, я пытаюсь десериализации данных JSON как это:Как десериализовать текст JSON?

[{"232":{"id":"232","reference":"022222","name":"Poire","content_title":"","content":"","pv_ttc":"230","picture_1":"","picture_2":"","picture_3":"","picture_4":"","picture_5":""}}] 

Если я правильно понимаю JSon, в начале мы имеем индекс, то Субмодуль с именем ссылка цена и т. д.

Ну, как десериализовать этот текст для объекта?

Зная, что у меня есть класс, как это:

public class productClass 
{ 
    public string id {get;set;} 
    public string reference { get; set; } 
    public string name { get; set; } 
    public string content_title{ get; set; } 
    public string content { get; set; } 
    public float pv_ttc{get;set;} 
    public string picture_1{get;set;} 
    public string picture_2{get;set;} 
    public string picture_3{get;set;} 
    public string picture_4{get;set;} 
    public string picture_5{get;set;} 

    public List<productClass> urlResult; 

    public productClass () 
    { 
    } 

    public productClass (string _id, string _reference, string _name, string _content_title, string _content, float _pv_ttc, string _picture_1, string _picture_2, string _picture_3, string _picture_4, string _picture_5) 
    { 
     id = _id; 
     reference = _reference; 
     name = _name; 
     content_title = _content_title; 
     content = _content; 
     pv_ttc = _pv_ttc; 
     picture_1 = _picture_1; 
     picture_2 = _picture_2; 
     picture_3 = _picture_3; 
     picture_4 = _picture_4; 
     picture_5 = _picture_5; 
     urlResult = new List<productClass> (); 
    } 

    public void addUrl (List<productClass> urlResult) 
    { 
     foreach (productClass _url in urlResult) 
     { 
      urlResult.Add (_url); 
     } 
    }  
} 

Спасибо за помощь.

+0

'Ну, как десериализации этот текст к объекту?' Поиск "[JSON десериализации C#] (https://www.google.com/#q=JSON+deserialization+C%23)" на ваша любимая поисковая система, и вы, несомненно, найдете массу ресурсов. JSON.Net - одна из лучших библиотек для этого. Не пытайтесь самостоятельно разбирать JSON из строки. –

+0

Возможный дубликат [Deserialize JSON with C#] (http://stackoverflow.com/questions/7895105/deserialize-json-with-c-sharp) –

ответ

1

@ Вы узнали, что используете JSON.Net? Это действительно хорошая структура для .Net, и вы можете легко де-сериализовать строки JSON в свои объекты C#. Вы можете посмотреть в документации, но вот простой пример с сайта:

Product product = new Product(); 

product.Name = "Apple"; 
product.ExpiryDate = new DateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes = new string[] { "Small", "Medium", "Large" }; 

string output = JsonConvert.SerializeObject(product); 
//{ 
// "Name": "Apple", 
// "ExpiryDate": "2008-12-28T00:00:00", 
// "Price": 3.99, 
// "Sizes": [ 
// "Small", 
// "Medium", 
// "Large" 
// ] 
//} 

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output); 

Надеюсь, это поможет.

+0

Это комментарий, а не ответ. –

+0

Я знаю для Json.Net, но я студент, и мои тренеры навязывают мне этот проект, я не могу устанавливать плагины или фреймворки, вкратце я должен управлять тем, что у меня есть. – sachou

1

Я предлагаю вам использовать JSON Framework как Newtonsoft JSON.NET

Вы можете очень легко сериализации и десериализации JSON объектов, как это:

Product product = new Product(); 

product.Name = "Apple"; 
product.ExpiryDate = new DateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes = new string[] { "Small", "Medium", "Large" }; 

string output = JsonConvert.SerializeObject(product); 
//{ 
// "Name": "Apple", 
// "ExpiryDate": "2008-12-28T00:00:00", 
// "Price": 3.99, 
// "Sizes": [ 
// "Small", 
// "Medium", 
// "Large" 
// ] 
//} 

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output); 

Присмотритесь на Serializing/Deserializing JSON with JSON.net

+0

Это комментарий, а не ответ и почти точно такой же, как и существующий ответ от @Bazindrix –

+0

Прошу прощения, что на самом деле требуется некоторое время, чтобы написать ответ, и что кто-то опубликовал тот же пример с веб-сайта, пока я писал Это. Я не могу предсказать будущее – xeraphim

0

Здесь мой пример. Я использую Google Map API в качестве примера

Я создаю следующий класс, соответствующий Google Maps

public class AddressComponent 
{ 
    public string long_name { get; set; } 
    public string short_name { get; set; } 
    public List<string> types { get; set; } 
} 

public class Result 
{ 
    public List<AddressComponent> address_components { get; set; } 
    public List<string> types { get; set; } 
} 

public class RootObject 
{ 
    public List<Result> results { get; set; } 
    public string status { get; set; } 
} 

Затем я создал этот метод

public string GetZipCodeBasedonCoordinates() 
{ 
    string zip = ""; 
    string url2 = @"https://maps.googleapis.com/maps/api/geocode/json?latlng=37.423021, -122.083739&sensor=false"; 

    System.Net.WebClient web = new System.Net.WebClient(); 
    var result = web.DownloadString(url2); 

    RootObject root = JsonConvert.DeserializeObject<RootObject>(result); 

    var allresults = root.results; 
    foreach (var res in allresults) 
    { 
     foreach (var add in res.address_components) 
     { 
      var type = add.types; 
      if (type[0] == "postal_code") 
      { 
       zip = add.long_name; 

      } 
     } 
    } 
    return zip; 
} 

Вы можете пойти сюда, чтобы увидеть результат JSON, что Я разобрал https://maps.googleapis.com/maps/api/geocode/json?latlng=37.423021,%20-122.083739&sensor=false

+0

Я использую ваше решение, но th компилятор возвращает мне: 'InvalidCastException: Невозможно отбрасывать из типа источника в тип назначения. JsonFx.Json.JsonReader.Deserialize [IndexPrductClass] (значение System.String) '. Извините, это моя первая работа с данными Json, и я немного потерялся. – sachou

+0

Вы добавили ссылку на сборку, используя Newtonsoft.Json? – kdnerd

+0

Проверьте код здесь http://goo.gl/X5M8Ts Вы можете загрузить ссылку в Visual Studio, перейдя в TOOLs> Диспетчер библиотечных пакетов> Manage Nuget Pacakges For Solution, затем выполните онлайн-поиск Newtonsoft – kdnerd

0

Дополнительную информацию см. В моем методе десериализа:

public IEnumerator loadProducts (int cat) 
{ 
    List <int> catNoTri = new List<int>(); 
    catNoTri.Add (0); 
    gm.totalPriceItem.Clear(); 
    isLoading = true; 
    WWW www = new WWW (urlProduct); 
    yield return www; 
    Debug.Log(www.text); 
    string json = www.text.ToString (); 
    IndexPrductClass myJson = JsonReader.Deserialize<IndexPrductClass> (json); 
    foreach (productClass item in products) 
    { 
     for (int i = 0; i < products.Length; i++) 
     { 
      Debug.Log("product.productValue[i] = " + products[i].name); 
     } 
     if (firstLoad || gm.catId == 0) 
     { 
      Debug.Log ("here1"); 
      nameProduct.Add (item.name); 
      Debug.Log("item.name = " + item.name); 
      idProduct.Add (item.id); 
      prixItem.Add (item.pv_ttc); 
      Debug.Log("item.pv_ttc = " + item.pv_ttc); 
      gm.totalPriceItem.Add (0); 
      gm.qte = new int [gm.totalPriceItem.Count]; 
      descriptifProduct.Add (item.content); 
      Debug.Log(" item.content = " +item.content); 
     } 
     else if (!firstLoad) 
     { 
      Debug.Log ("here2"); 
      nameProduct.Add (item.name); 
      idProduct.Add (item.id); 
      prixItem.Add (item.pv_ttc); 
      gm.totalPriceItem.Add (0); 
      gm.qte = new int [gm.totalPriceItem.Count]; 
      descriptifProduct.Add (item.content); 
     } 
    } 
    gm.canLoad = true; 
}