web-dev-qa-db-ja.com

JSONをC#配列に変換しますか?

Jsonを含む文字列をC#配列に変換する方法を知っている人はいますか。 webBrowserからtext/jsonを読み取り、文字列に保存するこれがあります。

string docText = webBrowser1.Document.Body.InnerText;

そのjson文字列を何らかの形で配列に変更するだけです。 Json.NETを見ていますが、配列をjsonに変更したくないので、それが必要なのかどうかわかりません。しかし、その逆です。助けてくれてありがとう!

30
Joey Morani

文字列を取得し、JavaScriptSerializerを使用してそれをネイティブオブジェクトにデシリアライズします。たとえば、このjsonを使用する場合:

string json = "[{Name:'John Simith',Age:35},{Name:'Pablo Perez',Age:34}]"; 

たとえば、次のように定義されたPersonというC#クラスを作成する必要があります。

public class Person
{
 public int Age {get;set;}
 public string Name {get;set;}
}

これで、JSON文字列をPersonの配列にデシリアライズできます:

JavaScriptSerializer js = new JavaScriptSerializer();
Person [] persons =  js.Deserialize<Person[]>(json);

JavaScriptSerializerドキュメントへのリンク です。

注:上記のコードはテストされていませんが、それがアイデアです それをテストしました。 「エキゾチック」なことをしているのでなければ、JavascriptSerializerを使用して問題ないはずです。

54
Icarus

はい、Json.Netが必要です。基本的に、Json文字列をobjectsの配列にデシリアライズする必要があります。

それらの例 を参照してください:

string myJsonString = @"{
  "Name": "Apple",
  "Expiry": "\/Date(1230375600000+1300)\/",
  "Price": 3.99,
  "Sizes": [
    "Small",
    "Medium",
    "Large"
  ]
}";

// Deserializes the string into a Product object
Product myProduct = JsonConvert.DeserializeObject<Product>(myJsonString);
6
ken2k
using Newtonsoft.Json;

このクラスをパッケージコンソールにインストールするこのクラスは、すべての.NETバージョン、たとえば私のプロジェクトで正常に動作します。DNX4.5.1とDNX CORE 5.0があり、すべてが動作します。

まず、JSONの逆シリアル化の前に、クラスを宣言して通常どおりに読み取り、データをどこかに保存する必要がありますこれは私のクラスです:

public class ToDoItem
{
    public string text { get; set; }
    public string complete { get; set; }
    public string delete { get; set; }
    public string username { get; set; }
    public string user_password { get; set; }
    public string eventID { get; set; }
}

たとえば、GETリクエストでデータをリクエストするHttpContentセクション:

HttpContent content = response.Content;
string mycontent = await content.ReadAsStringAsync();
//deserialization in items
ToDoItem[] items = JsonConvert.DeserializeObject<ToDoItem[]>(mycontent);
4