[解決済み] Json.netを使ったJSONのパース
質問
JSon.Net ライブラリを使用して、いくつかの JSON を解析しようとしています。 ドキュメントは少しまばらに見え、私は私が必要とするものを達成する方法として混乱しています。 以下は、私が解析する必要がある JSON の形式です。
{
"displayFieldName" : "OBJECT_NAME",
"fieldAliases" : {
"OBJECT_NAME" : "OBJECT_NAME",
"OBJECT_TYPE" : "OBJECT_TYPE"
},
"positionType" : "point",
"reference" : {
"id" : 1111
},
"objects" : [ {
"attributes" : {
"OBJECT_NAME" : "test name",
"OBJECT_TYPE" : "test type"
},
"position" : {
"x" : 5,
"y" : 7
}
} ]
}
私が本当に必要とする唯一のデータは、オブジェクトの配列内のものです。 JSonTextReaderのようなものでそれを解析し、OBJECT_TYPEやx、y位置のような必要なものだけを取り出すことは可能でしょうか? 私は
JSonTextReader
を望むように動作させることができず、その使用例もほとんど見当たりません。
最初にシリアライズして、それから私のオブジェクトで LINQ を使用するのが理想的であるように思われ、私が見つけたすべての例は最初に JSON をシリアライズすることについて説明しています。 特に、オブジェクトの配列は、属性と位置のペアのオブジェクトのリストのようなものにする必要があります。 JSon.Netがシリアライズする方法を知っているように、私のオブジェクトをどのようにコード化すればよいのか見当もつかないのです。
私は、私が作成した属性オブジェクトに必要なすべてを引き出すために、私自身の簡単なパーサーを書くことができると思ったのですが、ほとんどうまくいきません。
これがすべて意味をなすことを望みますが、何かアイデアはありますか?
どのように解決するのですか?
JSON.NETのことはよくわからないのですが、以下のようにすれば問題なく動作します。
JavaScriptSerializer
から
System.Web.Extensions.dll
(.net 3.5 sp1)です。
using System.Collections.Generic;
using System.Web.Script.Serialization;
public class NameTypePair
{
public string OBJECT_NAME { get; set; }
public string OBJECT_TYPE { get; set; }
}
public enum PositionType { none, point }
public class Ref
{
public int id { get; set; }
}
public class SubObject
{
public NameTypePair attributes { get; set; }
public Position position { get; set; }
}
public class Position
{
public int x { get; set; }
public int y { get; set; }
}
public class Foo
{
public Foo() { objects = new List<SubObject>(); }
public string displayFieldName { get; set; }
public NameTypePair fieldAliases { get; set; }
public PositionType positionType { get; set; }
public Ref reference { get; set; }
public List<SubObject> objects { get; set; }
}
static class Program
{
const string json = @"{
""displayFieldName"" : ""OBJECT_NAME"",
""fieldAliases"" : {
""OBJECT_NAME"" : ""OBJECT_NAME"",
""OBJECT_TYPE"" : ""OBJECT_TYPE""
},
""positionType"" : ""point"",
""reference"" : {
""id"" : 1111
},
""objects"" : [
{
""attributes"" : {
""OBJECT_NAME"" : ""test name"",
""OBJECT_TYPE"" : ""test type""
},
""position"" :
{
""x"" : 5,
""y"" : 7
}
}
]
}";
static void Main()
{
JavaScriptSerializer ser = new JavaScriptSerializer();
Foo foo = ser.Deserialize<Foo>(json);
}
}
編集します。
Json.NETは同じJSONとクラスを使って動作します。
Foo foo = JsonConvert.DeserializeObject<Foo>(json);
関連
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] ASP.NETでJSONを単純なDictionary<string,string>にデシリアライズするにはどうすればよいですか?
-
[解決済み] Json.netでシリアライズする際、プロパティ名を変更するにはどうすればよいですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】C#でJSONをパースする
-
[解決済み] json.netでプロパティをデシリアライズし、シリアライズしないようにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み] 2つのリストを結合する
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する