6

linq to sql dbを実行し、結果をVAR変数に入れるWebサービスを開発しています。次に、JavaScriptシリアライザー(c#)を使用して、VAR内の結果をjson形式にシリアル化します。このようなもの:

var sb= from p in ent.people .........
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new       System.Runtime.Serialization.Json.DataContractJsonSerializer(sb.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, sb);
string json = System.Text.Encoding.Default.GetString(ms.ToArray());

しかし、私はこのようなエラー応答を受け取ります:

Type      'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType2d`5[System.String,System.Nu llable`1[System.Int32],System.Nullable`1[System.Int32],System.Int32,System.String]]' cannot be serialized. 

DataContractAttribute属性でマークを付け、シリアル化するすべてのメンバーをDataMemberAttribute属性でマークすることを検討してください。タイプがコレクションの場合は、CollectionDataContractAttributeでマークすることを検討してください。サポートされている他のタイプについては、Microsoft.NETFrameworkのドキュメントを参照してください。

LINQの結果をJSONに直接シリアル化するにはどうすればよいですか?すべての回答をありがとう!エンリコ

4

3 に答える 3

5

DataContractJsonSerializerは匿名オブジェクトをサポートしていません。匿名オブジェクトをシリアル化する場合は、 JavaScriptSerializerクラスを使用できます。

var sb = from p in ent.people .........
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(sb);
于 2011-10-18T17:46:45.887 に答える
5

そのためにNewtonsoft.JSONを使用できます

これが構文です

var sb = from p in ent.people .........
string json = JsonConvert.SerializeObject(sb);
于 2018-07-06T17:53:32.000 に答える
0

私の最後の仕事で、私たちはこの振る舞いを見ました、そしてそれを回避するために少しすることが必要でした。

まず、CodePlexから無料で入手できるIQツールキットが必要です。そのライブラリには「PartialEvaluator」があり、常に単純なノードに評価されるノードを見つけ、「外部クロージャ」への参照を定数に置き換えることで、多くの式ツリーの複雑さを軽減できます。シリアル化を試みる前に、これを介してIQueryableを実行することをお勧めします。

次に、JSON DataContractシリアライザーを使用するには、シリアル化するクラスをDataContractとして設定する必要があります。これを行うためのチュートリアルがいたるところにあります。基本的には、クラス、含まれているクラス、および属性を使用してシリアル化するメンバーを装飾するだけです。

これら2つを配置したら、オブジェクトとそのIQueryableメンバーをDataContractJsonSerializerを使用してJSONにシリアル化できるようにする必要があります。

于 2011-10-18T17:51:05.603 に答える