1

現在、私は JavaScript シリアライザーを使用して、多くの REST サービスから JSON を返すだけでなく、「JsonObject」の動的実装を使用しています。

dynamic json = new JsonObject();
json.SomeThing = GetSomeThing();
json.AString = "Hello World";
json.Person = new Person{Name="Erik", LastName="Hansen", Age=35};

などなど...「ToString()」を呼び出した時点で変換を処理しますが、それは細かいことです。必要があるかどうかはわかりません... JavascriptSerializer は、上記で満たされた複雑なオブジェクトの画像に入ります。(好きな人)

明確にするために...上記は私がすでに持っている実装です...できればその点で自分の実装を取り除きたいです...それでもその「インターフェース」を維持することができます

私が探しているのは、上記をサポートする可能性のあるものですが、現在の JsonObject を維持できるので必要ないかもしれませんが、明らかに取り除くのはいいことです...

さらに重要なことは、ここで説明されているシナリオをサポートするものです...以下の例では、人の休憩サービスがあると想像できます...以下の例に示すように、部分的な人物オブジェクトを返すことができるようにしたいと思います:

class Person
{
  string Name;
  string LastName;
  int Age;
  Address Addr;
}

/rest/person/5
Json = { Name: "some name" }

/rest/person/5?Expand=LastName, Age
Json = { Name: "some name", LastName: "Some Last Name", Age: 35 }

/rest/person/5?Expand=Address
Json = { Name: "some name", Address: { ... } }

Nested stuff
/rest/person/5?Expand=Address, Address.Street
Json = { Name: "some name", Address: { Street: "bla" } }

明らかに、これらの「REST」呼び出しから JSON を形成するフレームワークを探しているわけではありません。上記のような人を返すことができるように、(コンテキスト内で) シリアライゼーション プロセスを十分に制御できる必要があります。人物もルート オブジェクトではない可能性があります。人物のリストまたは人物を参照するオブジェクトである可能性があります...

したがって、一般的にクライアント側では、次のように同じことができるようにしたいと考えています。

Expand: "Age, LastName"... 
Include: "/rest/address"...

構文は今重要なことではありません...

独自のフレームワークを拡張し続けることもできますが、実際のタスクに集中してから、自分のニーズに合った JSON フレームワークを見つけたいと思います...まだできていないか、できていないだけかもしれませんその特定のフレームワークで必要なものを達成する方法を知っています...

「JavaScript」シリアライザーと JsonObject を使用して、カスタム型リゾルバーを使用して何らかの方法でそれを適切に行うことができましたが、それよりも使いやすい可能性を探したいと思います...

また、JSON.NET などのパフォーマンスが JavaScript シリアライザーなどよりも優れていることに気付いたので、それらがシナリオをサポートできるかどうかを確認してみませんか。

4

1 に答える 1

0

Json.NET には、動的オブジェクト生成をサポートする名前空間 Newtonsoft.Json.Linq があり、匿名型と複合型から生成できます。

http://james.newtonking.com/projects/json/help/index.html?topic=html/LINQtoJSON.htm

于 2013-02-26T15:41:14.060 に答える