Сериализация класса в виде одной строки JSON в ASP.NET MVC - PullRequest
2 голосов
/ 24 января 2012

У меня есть следующий класс

[Serializable]
public class ApiRequestStatus :IEquatable<ApiRequestStatus>
{
    public static readonly ApiRequestStatus Failure =
                                            new ApiRequestStatus("Failure");
    public static readonly ApiRequestStatus Success =
                                            new ApiRequestStatus("Success");

    private string _status;

    private ApiRequestStatus(string status)
    {
        this._status = status;
    }

    public override string ToString()
    {
        return _status;
    }

    public bool Equals(ApiRequestStatus other)
    {
        return this._status == other._status;
    }
}

Когда это сериализовано с использованием System.Web.Script.Serialization.JavaScriptSerializer Я бы хотел, чтобы он сериализовался как строка "Failure" или "Success".

Я пытался реализовать пользовательский JavaScriptConverter, но это рендерит мой объект как объект с нулевым или большим количеством свойств в зависимости от IDictionary<string, object> возвращаемого мной.

например, когда я возвращаюсь и очищаюIDictionary<string, object> мой объект выглядит как пустой объект JavaScript: { }.

Если я верну new Dictionary<string, object> { {"_status", status._status}}, мой объект будет выглядеть как { "_status" : "Success" }.

Как я могу сериализовать объект так же, как строковое значение его поля _status?

Ответы [ 2 ]

1 голос
/ 24 января 2012

Я исправил это, переключив мой ApiRequestStatus на enum и используя сериализатор Json.NET в сочетании с атрибутом JsonConverter , но мне все равно было бы интереснопосмотрите, возможно ли это с JavaScriptSerializer.

1 голос
/ 24 января 2012

Добавьте метод ToJsonString() в свой класс и управляйте сериализацией вручную - в этом случае сериализуйте член _status напрямую.

Для всех других / поведения по умолчанию, просто сериализовать this (это может быть унаследовано для аккуратности) и вернуть его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...