2012-10-16 29 views
0

我嘗試通過將對象轉換爲某個接口來過濾不必要的屬性。接下來,我將它序列化爲JSON對象,如下面的代碼。如何在ASP.NET MVC中將接口序列化爲JSON?

@{ 
    var program = ViewBag.Program as IProgram; 
} 

<script type="text/javascript"> 
    window.program = @Html.Raw(Json.Encode(program)); 
</script> 

但是,它仍然序列化原始對象中的所有屬性,而不是序列化僅在接口中定義的屬性。

如何序列化當前對象類型中的屬性而不是序列化原始對象中的所有屬性?

+0

它爲什麼重要?除了使用你不需要的內存外,你有沒有額外的屬性真的很重要?只要包含接口的屬性。 –

回答

0

使用過程中的視圖模型:

@{ 
    var program = new 
    { 
     Foo = ViewBag.Program.Property1, 
     Bar = ViewBag.Program.Property2 
    }; 
} 

<script type="text/javascript"> 
    window.program = @Html.Raw(Json.Encode(program)); 
</script> 

順便說一句這是應該的控制器動作內完成,不會弄亂你的看法。因此,不要在ViewBag.Program中傳遞此對象,而是直接傳遞一個只包含需要序列化的屬性的視圖模型。

public ActionResult SomeAction() 
{ 
    Program program = ... 
    ViewBag.Program = new 
    { 
     Foo = ViewBag.Program.Property1, 
     Bar = ViewBag.Program.Property2 
    }; 
    return View(); 
} 

哦,並使用一個真正的視圖模型,並將該ViewBag切出。

+0

我知道這種方式。但它沒有專業的方法來解決這個問題。 –

+0

@靈魂大師,那麼我會離開你去做*專業*如你所願。這就是我會做的。在這種情況下我會重複一遍。實際上,我會使用真正的視圖模型,而不是像我在我的回答中提到的那樣使用任何ViewBag。如果您認爲這對您的編碼實踐不利,請隨時忽略我的答案。 –

+2

感謝您的回答。但我仍然在尋找使用序列化器來解決這個問題的答案。 –