2016-10-04 5 views
1

У меня есть объект json, и я пытаюсь преобразовать его в свой объект C#. Вот мой JSON:Преобразование объекта JSON в объект C#

{"GuvenlikNoktaArray": {"GuvenlikNoktası": [{"Id": 1,"GuvenlikNoktası1":"SANTIYE","KartNo":"000001889174217","Sira": 1},{"Id": 2,"GuvenlikNoktası1":"INSAAT","KartNo":"000000803567858","Sira": 2},{"Id": 3,"GuvenlikNoktası1":"ÇALISMA","KartNo":"000003417926233","Sira": 3},{"Id": 4,"GuvenlikNoktası1":"GÜVENLIK","KartNo":"000001888909897","Sira": 4}]}} 

И мой C# класс:

public partial class GuvenlikNoktası 
{ 
    public GuvenlikNoktası() 
    { 
     this.GüvenlikNoktasıOlay = new HashSet<GüvenlikNoktasıOlay>(); 
     this.PanikButonuAlarmlari = new HashSet<PanikButonuAlarmlari>(); 
    } 

    public int Id { get; set; } 
    public string GuvenlikNoktası1 { get; set; } 
    public string KartNo { get; set; } 
    public string Sira { get; set; } 

    public virtual ICollection<GüvenlikNoktasıOlay> GüvenlikNoktasıOlay { get; set; } 
    public virtual ICollection<PanikButonuAlarmlari> PanikButonuAlarmlari { get; set; } 
} 

И наконец, моя новообращенный попытка:

public void AddIstasyon(string json_string) 
{ 
    GuvenlikNoktası result = new JavaScriptSerializer().Deserialize<GuvenlikNoktası>(json_string); 
} 

Я не получаю никаких ошибок, но когда я debuged, Я вижу, что все атрибуты внутри 'result' равны нулю. Это похоже на пустой объект. Как я могу получить правильный объект «GuvenlikNoktası»? (Кстати, я уверен, что правильно получаю json-объект).

+1

Прежде всего, ваше свойство 'Sira' определяется как строка, когда в массиве JSON это целое число. – ThePerplexedOne

+1

Больше руководства по использованию json с C#: http://www.newtonsoft.com/json –

+0

Во-вторых, когда вы десериализуете, кажется, что вы десериализируете свой JSON в один экземпляр своего класса GuvenlikNoktası, когда Сам JSON представляет собой массив указанного класса. – ThePerplexedOne

ответ

1

Если вы должны сохранить эту JSON структуру как есть, вы можете использовать JObject для навигации внутри ваших свойств JSON, пока вы не достигнете целевые объекты для десерилизации. Пожалуйста, попробуйте код ниже;

PS: В этом коде используется Newtonsoft.Json;

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace SO_39847703 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string json = "{\"GuvenlikNoktaArray\": {\"GuvenlikNoktası\": [{\"Id\": 1,\"GuvenlikNoktası1\":\"SANTIYE\",\"KartNo\":\"000001889174217\",\"Sira\": 1},{\"Id\": 2,\"GuvenlikNoktası1\":\"INSAAT\",\"KartNo\":\"000000803567858\",\"Sira\": 2},{\"Id\": 3,\"GuvenlikNoktası1\":\"ÇALISMA\",\"KartNo\":\"000003417926233\",\"Sira\": 3},{\"Id\": 4,\"GuvenlikNoktası1\":\"GÜVENLIK\",\"KartNo\":\"000001888909897\",\"Sira\": 4}]}}"; 
      AddIstasyon(json); 
     } 

     public static void AddIstasyon(string json_string) 
     { 
      dynamic jsonObject = JObject.Parse(json_string); 
      string jsonToDeserializeStrongType = jsonObject["GuvenlikNoktaArray"]["GuvenlikNoktası"].ToString(); 
      List<GuvenlikNoktası> result = JsonConvert.DeserializeObject<List<GuvenlikNoktası>>(jsonToDeserializeStrongType); ; 
     } 
    } 

    public partial class GuvenlikNoktası 
    { 
     public GuvenlikNoktası() 
     { 
      this.GüvenlikNoktasıOlay = new HashSet<GüvenlikNoktasıOlay>(); 
      this.PanikButonuAlarmlari = new HashSet<PanikButonuAlarmlari>(); 
     } 

     public int Id { get; set; } 
     public string GuvenlikNoktası1 { get; set; } 
     public string KartNo { get; set; } 
     public string Sira { get; set; } 

     public virtual ICollection<GüvenlikNoktasıOlay> GüvenlikNoktasıOlay { get; set; } 
     public virtual ICollection<PanikButonuAlarmlari> PanikButonuAlarmlari { get; set; } 
    } 

    public class GüvenlikNoktasıOlay 
    { 

    } 

    public class PanikButonuAlarmlari 
    { 

    } 
} 

Надеется, что это помогает

1

Данные JSON и определение вашего класса не подходят друг другу. Поэтому значения по умолчанию (NULL) предоставляются сериализатором.

Для десериализации приведенных данных JSON вам нужна структура классов, как:

public class Root 
{ 
    public LevelOne GuvenlikNoktaArray {get; set;} 
} 

public class LevelOne { 
    public IEnumerable<GuvenlikNoktası> GuvenlikNoktası {get; set;} 
} 
+0

Да, rboe верен. Используйте этот 'https: // jsonformatter.curiousconcept.com /', чтобы посмотреть, как выглядит структура, и затем используйте этот 'http: // json2csharp.com /', чтобы увидеть структуру, в которой он должен быть проанализирован. –

0

Вы можете использовать этот класс.

public class GuvenlikNoktası 
{ 
    public int Id { get; set; } 
    public string GuvenlikNoktası1 { get; set; } 
    public string KartNo { get; set; } 
    public int Sira { get; set; } 
} 

public class GuvenlikNoktaArray 
{ 
    public IList<GuvenlikNoktası> GuvenlikNoktası { get; set; } 
} 

public class Example 
{ 
    public GuvenlikNoktaArray GuvenlikNoktaArray { get; set; } 
} 

Вы можете использовать эту ссылку Для справки http://jsonutils.com/.

Смежные вопросы