2012-05-20 23 views
5

का उपयोग करके जेसन को deserialize नहीं कर सकता यह json.net का उपयोग कर मेरा पहला समय है और मैं इसे समझ नहीं सकता। नीचे मेरा कोड है।json.net

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void btnRefreshTweets_Click(object sender, RoutedEventArgs e) 
    { 
     string ServerURL = @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/1/query?text=e&geometry=&geometryType=esriGeometryPoint&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&objectIds=&where=&time=&returnCountOnly=false&returnIdsOnly=false&returnGeometry=false&maxAllowableOffset=&outSR=&outFields=&f=json"; 

     WebClient webClient = new WebClient(); 
     webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted); 
     webClient.DownloadStringAsync(new Uri(ServerURL)); 
    } 

    void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      return; 
     } 
     List<Attributes> tweets = JsonConvert.DeserializeObject<List<Attributes>>(e.Result); 
     this.lbTweets.ItemsSource = tweets; 
    } 

    public class Attributes 
    { 
     public string STATE_NAME { get; set; } 
    } 

मैं STATE_NAME विशेषताओं को deserialize नहीं कर सकता। मैं क्या खो रहा हूँ?

मैं यह त्रुटि

"प्रकार में JSON ऑब्जेक्ट deserialize नहीं किया जा सकता 'System.Collections.Generic.List`1 [WPJsonSample.MainPage + गुण]' पंक्ति 1 स्थिति 20.। ," बार आ रही है

+0

JSON सिर्फ एक सूची नहीं है वास्तविक नामों बनाए रख सकते हैं, यह भी अन्य सामग्री है, "displayFieldName" की तरह, "fieldAliases", "खेतों और" सुविधाएँ "(अपने सूची)। मुझे यकीन नहीं है कि क्या यह json.net के लिए एक फर्क पड़ता है, लेकिन किसी ऑब्जेक्ट को उन सभी को समायोजित करने का प्रयास कर सकता है? – blitzen

+0

मैं json.net के साथ आगे बढ़ने से पहले इस पोस्ट को चेकआउट करूँगा। यह मृत सरल है: http: //www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx –

उत्तर

3

JSON कि यूआरएल से लौटे है:

{ 
    "displayFieldName": "STATE_NAME", 
    "fieldAliases": { 
    "STATE_NAME": "STATE_NAME" 
    }, 
    "fields": [ 
    { 
     "name": "STATE_NAME", 
     "type": "esriFieldTypeString", 
     "alias": "STATE_NAME", 
     "length": 25 
    } 
    ], 
    "features": [ 
    { 
     "attributes": { 
     "STATE_NAME": "Maine" 
     } 
    } 
} 

तो, हम यहाँ देख सकते हैं जड़ एक वस्तु, एक List<>

आप होगा करने के लिए की तरह एक गणनीय नहीं है जेएसओएन से मेल खाने के लिए क्लास स्ट्रक्चर को ठीक करें, या लिंक प्रश्नों के साथ इसे एक्सेस करें (json.net वेबसाइट में इसके कुछ नमूने हैं)।

7

यहाँ अपने वर्ग संरचना (मैं http://json2csharp.com/ इस्तेमाल किया)

public class FieldAliases 
{ 
    public string STATE_NAME { get; set; } 
} 

public class Field 
{ 
    public string name { get; set; } 
    public string type { get; set; } 
    public string alias { get; set; } 
    public int length { get; set; } 
} 

public class Attributes 
{ 
    public string STATE_NAME { get; set; } 
} 

public class Feature 
{ 
    public Attributes attributes { get; set; } 
} 

public class RootObject 
{ 
    public string displayFieldName { get; set; } 
    public FieldAliases fieldAliases { get; set; } 
    public List<Field> fields { get; set; } 
    public List<Feature> features { get; set; } 
} 
3

अगर आपको लगता है कि अंत बिंदु हिट करने के लिए कोशिश कर रहे हैं, तो आप मैन्युअल क्वेरी प्रस्तुत करने नहीं होना चाहिए, आप का उपयोग करना चाहिए ArcGIS WP7 SDK (यह नि: शुल्क है)। फिर QueryTask का उपयोग करें।

QueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/1/"); 
    queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; 
    queryTask.Failed += QueryTask_Failed; 

    ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query(); 
    query.Text = "e"; 
    query.ReturnGeometry = false; 

    queryTask.ExecuteAsync(query); 


private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) 
{ 
    FeatureSet featureSet = args.FeatureSet 
    // use the featureSet to do something. It contains everything you need 
} 

जो भी कारण के लिए (यदि आप सिर्फ JSON को पार्स के साथ मदद, नीचे देखें हो) तो आपको नहीं QueryTask उपयोग करने के लिए, आप अभी भी featureset की FromJson विधि का उपयोग कर सकते हैं

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    var featureSet = ESRI.ArcGIS.Client.Tasks.FeatureSet.FromJson(e.Result); 
    // Use it 
} 

यदि आपको JSON के साथ मदद की ज़रूरत है, तो यहां कुछ महत्वपूर्ण अवधारणाएं हैं।

1) घुंघराले ब्रेसिज़ एक वस्तु

2) वर्ग कोष्ठक एक सरणी का प्रतिनिधित्व प्रतिनिधित्व करते हैं।

3) गुण के लिए अल्पविराम

से अलग होते हैं JSON.NET का उपयोग करते समय, आप एक संपत्ति के लिए JsonProperty विशेषता जोड़ना चाहिए। इस तरह से आप भले ही json बेकार

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