2011-07-06 6 views
0

現在、javascriptデシリアライザなしで、次のJSON出力をSilverlightでデシリアライズしようとしています。私は、JsonArrayとLINQを使ってこれを行う方法があると聞いていましたが、私はそれを理解できません。asp.netライブラリを使用してjsonをデシリアライズする

{ 
    "Security": { 
     "CIK": "0000789019", 
     "Cusip": "594918104", 
     "Symbol": "MSFT", 
     "ISIN": "US5949181045", 
     "Valoren": "951692", 
     "Name": "Microsoft Corporation", 
     "Market": "NASDAQGS", 
     "CategoryOrIndustry": "TECHNOLOGY", 
     "Outcome": "Success", 
     "Message": null, 
     "Identity": null, 
     "Delay": 0 
    }, 
    "StartDate": "7/1/2011", 
    "EndDate": "7/6/2011", 
    "Quotes": [{ 
     "Date": "7/5/2011", 
     "Last": 26.03, 
     "Open": 26.1, 
     "LastClose": 26.02, 
     "High": 26.15, 
     "Low": 25.9, 
     "ChangeFromOpen": -0.07, 
     "PercentChangeFromOpen": -0.268, 
     "ChangeFromLastClose": 0.01, 
     "PercentChangeFromLastClose": 0.038, 
     "Volume": 37803000, 
     "SplitRatio": 1, 
     "LastAdjusted": 26.03, 
     "OpenAdjusted": 26.1, 
     "LastCloseAdjusted": 26.02, 
     "HighAdjusted": 26.15, 
     "LowAdjusted": 25.9, 
     "ChangeFromOpenAdjusted": -0.07, 
     "ChangeFromLastCloseAdjusted": 0.01, 
     "VolumeAdjusted": 37803000, 
     "NotTraded": false, 
     "Outcome": "Success", 
     "Message": null, 
     "Identity": null, 
     "Delay": 0 
    }, { 
     "Date": "7/1/2011", 
     "Last": 26.02, 
     "Open": 25.93, 
     "LastClose": 26, 
     "High": 26.17, 
     "Low": 25.84, 
     "ChangeFromOpen": 0.09, 
     "PercentChangeFromOpen": 0.347, 
     "ChangeFromLastClose": 0.02, 
     "PercentChangeFromLastClose": 0.077, 
     "Volume": 52914500, 
     "SplitRatio": 1, 
     "LastAdjusted": 26.02, 
     "OpenAdjusted": 25.93, 
     "LastCloseAdjusted": 26, 
     "HighAdjusted": 26.17, 
     "LowAdjusted": 25.84, 
     "ChangeFromOpenAdjusted": 0.09, 
     "ChangeFromLastCloseAdjusted": 0.02, 
     "VolumeAdjusted": 52914500, 
     "NotTraded": false, 
     "Outcome": "Success", 
     "Message": null, 
     "Identity": null, 
     "Delay": 0 
    }], 
    "Outcome": "Success", 
    "Message": null, 
    "Identity": "Cookie", 
    "Delay": 0.014001 
} 

何が私がQuotes配列からDateLastAdjustedを抽出し、独自の配列にそれぞれを置くしようとしているところ、このような何かをやってする最善のアプローチだろうか?

は、ここで私はストリームにJSONを取得するようになったどのくらいです:

downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted); 
      downloader.OpenReadAsync(serviceUri); 
     } 

     void downloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
     { 
      if (e.Error == null) 
      { 
       Stream responseStream = e.Result; 
       //add code here 
      } 
     } 
+0

おそらく[Json.NET](http://json.codeplex.com /)を使用して解析し、Linqが必要な情報を選択します。 – R0MANARMY

+0

[C#を使用したJSONデシリアライズ]の複写可能(0120-18753) – R0MANARMY

答えて

4

次のSilverlightコードでは、JSON文字列を「リスト」オブジェクトに逆シリアル化してから、リストの引用符をループしてDateおよびLastAdjustedを抽出します。 DataContractJsonSerializer(MSDN)クラスにアクセスするには、System.ServiceModel.Webへの参照をプロジェクトに追加してください。

C#

string json = // Your JSON string 
Listing myListing = DeserializeJSON(json); 
foreach (Quote quote in listing.Quotes) 
{ 
    DateTime dt = quote.Date; 
    Double lastAdjusted = quote.LastAdjusted; 
} 

public Listing DeserializeJSON(string json) 
{ 
    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
    { 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Listing)); 
     return (Listing)serializer.ReadObject(ms); 
    } 
} 

クラス

public class Listing 
    { 
     public Security Security { get; set; } 
     public DateTime StartDate { get; set; } 
     public DateTime EndDate { get; set; } 
     public List<Quote> Quotes { get; set; } 
    } 

    public class Security 
    { 
     public string CIK {get; set;} 
     public string Cusip {get; set;} 
     public string Symbol {get; set;} 
     public string ISIN {get; set;} 
     public string Valoren {get; set;} 
     public string Name {get; set;} 
     public string Market {get; set;} 
     public string CategoryOrIndustry {get; set;} 
     public string Outcome {get; set;} 
     public string Message {get; set;} 
     public string Identity {get; set;} 
     public string Delay { get; set; } 
    } 

    public class Quote 
    { 
     public DateTime Date { get; set; } 
     public Double Last { get; set; } 
     public Double Open { get; set; } 
     public Double LastClose { get; set; } 
     public Double High { get; set; } 
     public Double Low { get; set; } 
     public Double ChangeFromOpen { get; set; } 
     public Double PercentChangeFromOpen { get; set; } 
     public Double ChangeFromLastClose { get; set; } 
     public Double PercentChangeFromLastClose { get; set; } 
     public Double Volume { get; set; } 
     public Double SplitRatio { get; set; } 
     public Double LastAdjusted { get; set; } 
     public Double OpenAdjusted { get; set; } 
     public Double LastCloseAdjusted { get; set; } 
     public Double HighAdjusted { get; set; } 
     public Double LowAdjusted { get; set; } 
     public Double ChangeFromOpenAdjusted { get; set; } 
     public Double ChangeFromLastCloseAdjusted { get; set; } 
     public Double VolumeAintdjusted { get; set; } 
     public bool NotTraded { get; set; } 
     public string Outcome { get; set; } 
     public string Message { get; set; } 
     public string Identity { get; set; } 
     public int Delay { get; set; } 
    } 

あなたはここで多くを学ぶことができます。JSON serialization and deserialization in Silverlight

+0

私はsilverlightを使用していますので、このライブラリを使用することはできません。 LINQを使ってこれを行う別の方法はありますか? – locoboy

+0

@ cfarm54:それは確かに物事を変えます。 SilverlightでJSONオブジェクトを逆シリアル化できるように、私の答えを更新しました。 –

+0

ありがとう、これはお金です。 – locoboy

1

使用Newtonsoft Json.netライブラリがあなたのJSONで辞書を構築します。次に、LINQを使用します。

+0

Json.NETはnewtonsoftのJSONライブラリだと思います。 – R0MANARMY

関連する問題