2013-08-30 9 views
22

私はc#とjsonオブジェクトが新しく、ウェブサイトをxmlベースの設定ファイルからjsonベースのものに移動しようとしています。 .jsonファイルを読み込んでオブジェクトに変換する方法はありますか?私はウェブを検索していて、見つけられません。私はすでにXMLファイルを変換して.jsonとして保存しています。私はむしろサードパーティのライブラリを使用しないでください。.jsonファイルをC#プログラムにロードする

+0

重複がありますか? http://stackoverflow.com/questions/4521239/deserializing-json-using-c-sharpを参照してください。 – SolarBear

+6

「私はウェブを検索していますが、私は見つけられません」と信じがたいです。 – I4V

+0

フェア十分に、私はこの類似のものが、私は彼らのソリューションを試して、それは動作していませんでした。 –

答えて

48

あなたが本当にが確立ライブラリを使用する必要があります、などNewtonsoft.Json(でもMicrosoftは、このようなMVCやWebAPIのようなフレームワークのために使用する)、または.NETの内蔵JavascriptSerializer。ここで

はNewtonsoft.Jsonを使用してJSONを読み込むのサンプルです:

JObject o1 = JObject.Parse(File.ReadAllText(@"c:\videogames.json")); 

// read JSON directly from a file 
using (StreamReader file = File.OpenText(@"c:\videogames.json")) 
using (JsonTextReader reader = new JsonTextReader(file)) 
{ 
    JObject o2 = (JObject) JToken.ReadFrom(reader); 
} 
+1

まあ...残念ながら、OPは自分の*を書くべきではありません。しかし、この機能を実装するフレームワーククラスが必要な場合は、['JavaScriptSerializer'](http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx)が動作します。 –

+0

私はNewtonSoftをダウンロードしましたが、外部の図書館を利用して私に叫んでいる人がいませんでした。 –

+0

@inquisitiveIdiot私は誤解して、自分で書くことを意図していました。組み込みのJavascriptSerializerはほとんどのユースケースでうまくいきますが、Newtonsoftは非常に高速でフル機能です。 – STW

1

はJavaScriptSerializerクラスがそのデータをシリアライズし、デシリアライズする非同期 通信層によって内部的に使用されるMicrosoftのJavaScriptSerializer

を参照してください。ブラウザとWebサーバーの間で が渡されます。シリアライザの インスタンスにはアクセスできません。ただし、このクラスはパブリックAPIを公開します。 したがって、JavaScriptコード オブジェクト表記法(JSON)をマネージコードで使用する場合は、クラスを使用できます。

名前空間:System.Web.Script.Serialization

アセンブリ:他の回答で述べたように(System.Web.Extensions.dll中)System.Web.Extensions

+0

JSONは(一般的な信念に反して)* Javascriptのサブセットではありません。たとえば、https://medium.com/joys-of-javascript/json-js-42a28471221d – Nubok

4

json.NETの使用をお勧めします。 NuGetを使用してパッケージをダウンロードできます。その後、jsonファイルをC#オブジェクトに逆シリアル化すると、次のようなことができます。

JsonSerializer serializer = new JsonSerializer(); 
    MyObject obj = serializer.Deserialize<MyObject>(File.ReadAllText(@".\path\to\json\config\file.json"); 

上記のコードは、あなたが

public class MyObject 
{ 
    public string prop1 { get; set; }; 
    public string prop2 { get; set; }; 
} 

のようなものを持っていることを前提とし、あなたのJSONは次のようになります。

{ 
     "prop1":"value1", 
     "prop2":"value2" 
} 

私はあなたの定義は、JSON年代と一致していますタイプでそれを提供することを仮定してオブジェクトにJSONをデシリアライズしますジェネリックデシリアライズの方法を使用して好みます。 2つの間に矛盾があったり、値を設定したり、あるいは無視したりすることができない場合は、問題の内容によって異なります。 jsonの定義がC#の型の定義と正確に一致するならば、それだけで動作します。

+0

の2行目にparenがあります。 – redwards510

8

のC#にJSONをシリアライズするためのもう一つの良い方法は以下の通りです:

RootObject ro = new RootObject(); 
    try 
    { 

     StreamReader sr = new StreamReader(FileLoc); 
     string jsonString = sr.ReadToEnd(); 
     JavaScriptSerializer ser = new JavaScriptSerializer(); 
     ro = ser.Deserialize<RootObject>(jsonString); 


    } 

は、あなたがこのプログラムファイルにある.NET 4.0(x86の)>参照アセンブリ>にsystem.web.extensionsへの参照を追加する必要がありますフレームワーク> system.web.extensions.dllであり、あなたは正規の4.0フレームワークではなく4.0クライアントであることを確認する必要があります

+0

sr.Close();を忘れないでください。 – user3704628

1

使用サーバー。私はthis.Itに類似の質問には答えているにもリンクの下に見て、あなた How to Parse an example string in C#

のための完全な助けします:注JSONファイルや負荷の実際のパスを取得し、StreamReaderを

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

public class RootObject 
{ 
    public string url_short { get; set; } 
    public string url_long { get; set; } 
    public int type { get; set; } 
} 

public class Program 
{ 
    static public void Main() 
    { 
     using (StreamReader r = new StreamReader(Server.MapPath("~/test.json"))) 
     { 
      string json = r.ReadToEnd(); 
      List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(json); 
     } 

    Console.WriteLine(ro[0].url_short);     
    } 
} 

を使用してファイルを読み込むためのMapPathの

+0

import System.IO。あなたのコードは構築されません。 – thang

関連する問題