HTMLString序列化为字符串,编码为json

本文关键字:编码 json 字符串 序列化 HTMLString | 更新日期: 2023-09-27 18:10:31

简单地说,我想有一个属性在我的对象序列化为字符串而不是HtmlString(它是)。

这里的原因是对象是在json中序列化的,toString函数不是返回对象的字符串内容,而是返回'[object object]'。

或者,是否有可能将属性标记为[Non-Serializable],并将另一个属性公开为可序列化的版本?

Thanks in advance

编辑:示例代码:

[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'
}

HTMLString序列化为字符串,编码为json

<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>

我找到了一个解决你问题的方法。
使用这个类:

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>"
}