2016-12-19 10 views
-1

私はこのコードを持っている:EF結果にC#のseralize動的オブジェクト(動的C#のオブジェクトからJSONオブジェクトを作成)

var companyDetails = db.tbl_Mallstore.ToList(); 

dynamic result = new System.Dynamic.ExpandoObject(); 
result.count = 1; 
result.company = companyDetails.FirstOrDefault(); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

string output = serializer.Serialize(result); 

エラーをスロー:この場合

A circular reference was detected while serializing an object of type 'eDurar.Models.tbl_Mallstore

をそれが動作します:

dynamic result = new System.Dynamic.ExpandoObject(); 
result.count = count; 
result.store_name = companyDetails.FirstOrDefault().store_name; 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string json = serializer.Serialize(result); 
+0

動的を使用する理由私はそれが2つのプロパティを持つカスタムクラスを使用してシリアル化できることをかなり確信しています。 – mybirthname

+0

@mybirthnameクラスの不要な宣言を避けるため –

+1

http://stackoverflow.com/questions/1153385/a-circular-reference-was-detected-while-serializing-an-object-of-type-subsonic – mybirthname

答えて

0

手動で必要なフィールドを指定する必要がありました。私は他のデータの中にいくつかの循環参照があると思います。

int count = 0; 

var companyDetails = db.tbl_Mallstore.ToList(); 

count = companyDetails.Count(); 

dynamic result = new System.Dynamic.ExpandoObject(); 
result.count = count; 
if (count > 0) 
{ 
    result.store = companyDetails.Select(x => new { x.store_name, x.store_id }).FirstOrDefault(); 
} 

return this.Json(result); 
関連する問題