2011-10-03 58 views
4

只需要我的對象中有一個屬性序列化爲字符串而不是HtmlString(它就是這樣)。HTMLString序列化爲字符串,在json中編碼

這裏的推理是對象在json中被序列化,並且toString函數沒有返回對象的字符串內容而是'[object Object]'。

或者,是否有可能將該屬性標記爲[Non-Serializable],並將其他屬性替換爲可序列化的版本?

在此先感謝

編輯: 示例代碼:

[Serializable] 
public MyObject 
{ 
    public int id= 0; 
    public string name = "myName"; 
    public HtmlString WishIWasAString = new HtmlString("notAString"); 
    public string fakeHtmlString 
    { 
     get { return WishIWasAString.ToString(); } 
    } 
} 

例JSON:

{ 
    id: 0, 
    name: 'myName' 
    wishIWasAString: {} 
    fakeHtmlString: 'notAString' 
} 

回答

1
<script type="type/javascript"> 
    var fooProperty = @Html.Raw(Json.Encode(Model.Foo)); 
</script> 

,或者如果你想JSON序列化整個模型變成一個javascript變量:

<script type="type/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
    alert(model.Foo.Bar); 
</script> 
+0

對不起,我想我可能沒有清楚表達我希望解釋這個問題。我添加了示例代碼和它生成的輸出以幫助澄清問題。理想情況下,我可以從HtmlString中生成fakeHtmlString,而不是被黑的屬性。 – Highstead

+0

@Highstead,請問爲什麼要在視圖模型上使用'HtmlString'類型? –

+0

我想我不一定需要使用html字符串,並且可以在運行時逃脫字符串。但它在後端表示的數據實際上是HtmlString。 – Highstead

0

我找到了解決您的問題的方法。
使用這個類:

using System.Runtime.Serialization; 

[DataContract] 
public MyObject 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Name { get; set; } 

    public HtmlString MyHtmlContent { get; set; } 

    [DataMember(Name = "MyHtmlContent")] 
    private string serializedMyHtmlContent 
    { 
     get { return this.MyHtmlContent == null ? null : MyHtmlContent .ToString(); } 
    } 
} 

您將獲得該JSON:

{ 
    Id: 1234, 
    Name: "Chris", 
    MyHtmlContent: "<p>Hello word</p>" 
}