2012-05-20 5 views
5

Bu, json.net'i ilk defa kullanıyorum ve bunu çözemiyorum. İşte benim kodum aşağıda.json.net'i kullanarak json'u kaldıramadı

// 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 özniteliklerini kaldırılamıyorum. Neyi kaçırıyorum?

Ben

bu hatayı almaya devam "türü içine JSON nesnesi serisini Can 'System.Collections.Generic.List`1 [WPJsonSample.MainPage + Özellikler]'. Hat 1, pozisyon 20." JSON o url döndü

+0

berbat bile özel isimleri koruyabilir Bu sayede, hem "displayFieldName" gibi çok başka şeyler var "fieldAliases", "alanlarını ve 'özellikler' (sizin json.net için bir fark yaratıp yaratmadığına emin değilim, ama hepsini kabul edebilecek bir nesne oluşturmayı deneyebilir misin? – blitzen

+0

json.net ile devam etmeden önce bu gönderiyi kontrol edebilirdim: Bu çok basit: http: //www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx –

cevap

3

geçerli: Yani

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

biz kök bir List<>

Sen gerekecek

nasıl bir numaralandırılamaz bir nesne, burada görebilirsiniz sınıf yapısını JSON ile eşleştirecek şekilde düzeltin veya Linq sorgularıyla erişin (json.net web sitesinde bunun bazı örnekleri vardır).

7

İşte sınıf yapısı (I http://json2csharp.com/ kullanılan)

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

o uç noktasını vurmaya çalışıyorsun EĞER olduğunu sorguyu göndererek elle olmamalı, kullanmak gerekir ArcGIS WP7 SDK (ÜCRETSİZ!). Daha sonra QueryTask kullanın.

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 
} 

Herhangi bir sebeple (sadece aşağıya bakınız, JSON ayrıştırma yardıma ihtiyacınız varsa), hala featureset ait FromJson yöntemini kullanabilirsiniz, QueryTask kullanmak istemiyorum

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

JSON ile ilgili yardıma ihtiyacınız varsa, bazı önemli kavramlar aşağıda verilmiştir.

1) kıvırcık parantezler bir nesne

2) köşeli parantezler bir diziyi temsil etmektedir.

3) özellikleri Json.NET kullanırken, bir mülke JsonProperty özelliği eklemeniz gerekir virgül

ile ayrılır. json JSON sadece liste değildir

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