【问题标题】:HTMLString Serialized as string, encoded in jsonHTMLString 序列化为字符串,以 json 编码
【发布时间】:2011-10-03 21:00:11
【问题描述】:

我只是想让我的对象中的一个属性序列化为一个字符串而不是 HtmlString(它是)。

这里的推理是对象是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'
}

【问题讨论】:

    标签: c# .net json asp.net-mvc-3 razor


    【解决方案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>
    

    【讨论】:

    • 对不起,我想我可能没有像我希望的那样清楚地解释这个问题。我添加了示例代码及其产生的输出以帮助澄清问题。理想情况下,我可以从 HtmlString 生成 fakeHtmlString 而不是被黑的属性。
    • @Highstead,请问您为什么要在视图模型上使用 HtmlString 类型?
    • 我想我不一定需要使用 html 字符串,并且可以在运行时转义字符串。但它在后端表示的数据实际上是 HtmlString。
    【解决方案2】:

    我找到了您问题的解决方案。
    使用这个类:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多