HTMLString Сериализуется как строка, закодированная в json - PullRequest
5 голосов
/ 04 октября 2011

Просто я хочу, чтобы свойство в моем объекте сериализовалось как строка вместо HtmlString (которая есть).

Причина заключается в том, что объект сериализуется в json, и функция toString возвращает не строковое содержимое объекта, а «[объект объекта]».

Как вариант, можно ли пометить свойство как [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'
}

Ответы [ 2 ]

1 голос
/ 04 октября 2011
<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 голосов
/ 06 февраля 2015

Я нашел решение вашего вопроса.
Используйте этот класс:

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>"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...