2016-10-14 2 views
0

Json (String)의 데이터를 해당 속성을 사용하는 객체로 변환해야합니다. 나는 계속 널 값을 가지고있다. Json 파일과 수업을 확인했는데이 문제의 가능한 이유가 없습니다. 당신이 좀 도와 주시겠습니까`JsonConvert.DeserializeObject는 항상 null 값을 전달합니다.

이 JSON 파일에서 부품을 :

{ 


"global": { 
    "@context": "http://environment.data.gov.uk/flood-monitoring/meta/context.jsonld", 

"meta": { 
    "publisher": "Environment Agency", 
    "licence": "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/", 
    "documentation": "http://environment.data.gov.uk/flood-monitoring/doc/reference", 
    "version": "0.6.1", 
    "comment": "Status: Beta service", 
    "hasFormat": [ 
     "http://environment.data.gov.uk/flood-monitoring/id/stations.csv" 
    ] 
}, 
"items": [ 
    { 
     "@id": "http://environment.data.gov.uk/flood-monitoring/id/stations/1029TH", 
     "RLOIid": "7041", 
     "catchmentName": "Cotswolds", 
     "dateOpened": "1994-01-01", 
     "easting": 417990, 
     "label": "Bourton Dickler", 
     "lat": 51.874767, 
     "long": -1.740083, 
     "measures": [ 
      { 
       "@id": "http://environment.data.gov.uk/flood-monitoring/id/measures/1029TH-level-downstage-i-15_min-mASD", 
       "parameter": "level", 
       "parameterName": "Water Level", 
       "period": 900, 
       "qualifier": "Downstream Stage", 
       "unitName": "mASD" 
      }, 
      { 
       "@id": "http://environment.data.gov.uk/flood-monitoring/id/measures/1029TH-level-stage-i-15_min-mASD", 
       "parameter": "level", 
       "parameterName": "Water Level", 
       "period": 900, 
       "qualifier": "Stage", 
       "unitName": "mASD" 
      } 
     ], 
     "northing": 219610, 
     "notation": "1029TH", 
     "riverName": "Dikler", 
     "stageScale": "http://environment.data.gov.uk/flood-monitoring/id/stations/1029TH/stageScale", 
     "stationReference": "1029TH", 
     "town": "Little Rissington", 
     "wiskiID": "1029TH" 
    }, 
    { 
     "@id": "http://environment.data.gov.uk/flood-monitoring/id/stations/E2043", 
     "RLOIid": "6022", 
     "catchmentName": "Welland", 
     "dateOpened": "1992-01-01", 
     "datumOffset": 2, 
     "easting": 528000, 
     "label": "Surfleet Sluice", 
     "lat": 52.845991, 
     "long": -0.100848, 
     "measures": [ 
      { 
       "@id": "http://environment.data.gov.uk/flood-monitoring/id/measures/E2043-level-stage-i-15_min-mASD", 
       "parameter": "level", 
       "parameterName": "Water Level", 
       "period": 900, 
       "qualifier": "Stage", 
       "unitName": "mASD" 
      } 
     ], 
     "northing": 329300, 
     "notation": "E2043", 
     "riverName": "River Glen", 
     "stageScale": "http://environment.data.gov.uk/flood-monitoring/id/stations/E2043/stageScale", 
     "stationReference": "E2043", 
     "town": "Surfleet Seas End", 
     "wiskiID": "L31004" 
    }, 

이러한 클래스는 다음과 같습니다

json으로
namespace TechnicalTestZK 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     var json = File.ReadAllText("C:/Users/Zied/Desktop/Json.txt"); 

     var ab = JsonConvert.DeserializeObject<Global>(json); 
     Console.WriteLine(ab.Items[0].RiverName); 

     //Console.WriteLine(GET("http://environment.data.gov.uk/flood-monitoring/id/floods")); 
     Console.ReadLine(); 

    } 

    static string GET(string url) 
    { 
     System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     try 
     { 
      WebResponse response = request.GetResponse(); 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       return reader.ReadToEnd(); 
      } 
     } 
     catch (WebException ex) 
     { 
      WebResponse errorResponse = ex.Response; 
      using (Stream responseStream = errorResponse.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
       String errorText = reader.ReadToEnd(); 
       // log errorText 
      } 
      throw; 
     } 
    } 
} 


} 


using Newtonsoft.Json; 


namespace TechnicalTestZK 
{ 
    public class Meta 
{ 

    [JsonProperty("publisher")] 
    public string Publisher { get; set; } 

    [JsonProperty("licence")] 
    public string Licence { get; set; } 

    [JsonProperty("documentation")] 
    public string Documentation { get; set; } 

    [JsonProperty("version")] 
    public string Version { get; set; } 

    [JsonProperty("comment")] 
    public string Comment { get; set; } 

    [JsonProperty("hasFormat")] 
    public string[] HasFormat { get; set; } 
    } 
} 


using Newtonsoft.Json; 


namespace TechnicalTestZK 
{ 
    public class Measure 
{ 

    [JsonProperty("@id")] 
    public string Id { get; set; } 

    [JsonProperty("parameter")] 
    public string Parameter { get; set; } 

    [JsonProperty("parameterName")] 
    public string ParameterName { get; set; } 

    [JsonProperty("period")] 
    public int Period { get; set; } 

    [JsonProperty("qualifier")] 
    public string Qualifier { get; set; } 

    [JsonProperty("unitName")] 
    public string UnitName { get; set; } 
} 
} 

using Newtonsoft.Json; 

namespace TechnicalTestZK 
{ 

    public class Item 
    { 

     [JsonProperty("@id")] 
     public string Id { get; set; } 

     [JsonProperty("RLOIid")] 
     public string RLOIid { get; set; } 

     [JsonProperty("catchmentName")] 
     public string CatchmentName { get; set; } 

     [JsonProperty("dateOpened")] 
     public string DateOpened { get; set; } 

     [JsonProperty("easting")] 
     public int Easting { get; set; } 

     [JsonProperty("label")] 
     public string Label { get; set; } 

     [JsonProperty("lat")] 
     public string Lat { get; set; } 

     [JsonProperty("long")] 
     public string Long { get; set; } 

     [JsonProperty("measures")] 
     public Measure[] Measures { get; set; } 

     [JsonProperty("northing")] 
     public int Northing { get; set; } 

     [JsonProperty("notation")] 
     public string Notation { get; set; } 

     [JsonProperty("riverName")] 
     public string RiverName { get; set; } 

     [JsonProperty("stageScale")] 
     public string StageScale { get; set; } 

     [JsonProperty("stationReference")] 
     public string StationReference { get; set; } 

     [JsonProperty("town")] 
     public string Town { get; set; } 

     [JsonProperty("wiskiID")] 
     public string WiskiID { get; set; } 

     [JsonProperty("datumOffset")] 
     public float? DatumOffset { get; set; } 

     [JsonProperty("downstageScale")] 
     public string DownstageScale { get; set; } 
    } 
} 

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

namespace TechnicalTestZK 
{ 
internal class Global 
{ 
    [JsonProperty("@context")] 
    public string @context { get; set; } 

    [JsonProperty("meta")] 
    public Meta Meta { get; set; } 

    [JsonProperty("items")] 
    public Item[] Items { get; set; } 
} 
} 

답변

2

당신이 역 직렬화하려고하는 파일은 하나 "수준 "Global보다 높습니다. 이는 사용자가 비 직렬화하려는 것입니다. 대신,이 같은 형태의 새로운 클래스합니다

public class GlobalContainer 
{ 
    [JsonProperty("global")] 
    public Global global { get; set; } 
} 

을 그리고 JsonConvert.DeserializeObject<GlobalContainer>(json)

+0

가 대단히 감사합니다 . 귀하의 답변이 내 문제를 해결했습니다 – zied

+0

@zied - 귀하의 질문에 대한 답변이 있으면 [그것을 그대로 표시하십시오] (https://meta.stackexchange.com/questions/147531/how-mark-my-question-as-answered-on) -stackoverflow) 다른 사람들이 참조로 사용할 수 있습니다. – dbc

0

를 호출하여 해당로 역 직렬화 또는 당신은 http://json2csharp.com 같은 JSON 2 # 파서를 사용할 수 있습니다)

관련 문제