2013-01-25 22 views
5

Json.Encode()ヘルパーはJavaScriptSerializerクラスを使用して文字列をjsonにエンコードしますか?Json.Encode()はJavaScriptSerializerクラスを使用してシリアル化します

シリアル化されているクラスプロパティに[ScriptIgnore]属性があっても、Json.Encode(Model)を使用すると循環参照例外が発生します。

Json.Encode()ヘルパーはJavaScriptSerializerを使用してjsonにシリアル化していませんが、msdnのどこにでもドキュメンテーションが見つかりません。上記リンクJson.Encodeに応じ

@Html.Raw(Json.Encode(Model)) 

ここでシリアライズしてはならない性質を持っているモデルの一つの例です...

using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Web.Script.Serialization; 

namespace RobotDog.Entities { 
    public class Character { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     [MaxLength(200)] 
     public string Name { get; set; } 

     public virtual Person Person { get; set; } 

     [ScriptIgnore] 
     public virtual Movie Movie { get; set; } 
    } 
} 
+1

'Json.Encode'可能性が最も高い' System.Web.Mvc'を使用するを参照してください支援するためにもSystem.Web.Script.Serialization.JavaScriptSerializer

ある

private static readonly JavaScriptSerializer _serializer = Json.CreateSerializer(); public static string Encode(object value) { DynamicJsonArray dynamicJsonArray = value as DynamicJsonArray; if (dynamicJsonArray != null) return Json._serializer.Serialize((object) (object[]) dynamicJsonArray); else return Json._serializer.Serialize(value); } 

'System.Web.Script.Serialization.JavaScriptSerializer'とは異なるネームスペースです。あなたは何を達成しようとしていますか? – juanreyesv

+0

私のコントローラでは、私のリポジトリに 'IEnumerable 'を取得してビューにUI用のKnockoutJSを使用しているため、モデルをシリアル化しています。 – bflemi3

+0

私のエンティティは、私のWebプロジェクトから別のクラスライブラリプロジェクトにあることにも言及する必要があります。 – bflemi3

答えて

6

Json.Encode()ヘルパーはJavaScriptSerializerクラスを使用して文字列をjsonにエンコードしますか?

はい。

ソースコードから:JavaScriptSerializerはあなたの問題がthis thread

0

http://msdn.microsoft.com/en-us/library/system.web.helpers.json.encode(v=vs.111).aspx

は、システムを使用しています。 web.helpers。

モデルには何が含まれていますか?

また、[ScriptIgnore]はあなたが割り当てたものを無視しますか?

+0

ええ、私はmsdnドキュメントを見てきました。私は直列化してはならないプロパティを持つエンティティの1つを追加しました。 – bflemi3

関連する問題