ScriptIgnore не работает в приложении службы WCF REST

Я запустил проект приложения-службы Visual Studio WCF Rest, где я хочу иметь службу, которая возвращает сообщение в формате Json с сериализованным объектом, и я хочу, чтобы НЕКОТОРЫЕ поля этого объекта не сериализовались. Я должен сказать, что мои знания WCF очень просты, и что я использовал проект приложения службы отдыха из Visual Studio, потому что это простой способ быстро реализовать то, что мне нужно.

Допустим, это объект, который у меня есть:

public class BaseMessage
{
    public string errorCode { get; set; }
    public string errorMessage { get; set; }
}

И это мой код

    [WebGet(UriTemplate = "/v1/test", 
    ResponseFormat = WebMessageFormat.Json),OperationContract]

    public BaseMessage Test()
    {
        return (new BaseMessage { errorCode = "000", errorMessage = "test" });
    }

Я везде читал, что мне нужно назначить атрибут [ScriptIgnore] свойствам, которые я не хочу сериализовать. Но если я это сделаю, это не сработает. Я все равно получаю их сериализованными.

Единственный способ добиться того, что я хочу сделать, - объявить объект, который я хочу вернуть, следующим образом:

[Serializable]
public class BaseMessage
{
    public string errorCode;
    [NonSerialized]
    public string errorMessage;
}

Таким образом, я получаю сериализованный класс, как я хочу. Но это сильно беспокоит меня, потому что я не могу делать это правильно. Я делаю это правильно?

1 ответ

Решение

Я думаю, что вы должны использовать атрибут [DataContract] для ваших объектов данных и [DataMember] для членов вашего объекта

как здесь http://msdn.microsoft.com/en-us/library/ms733127.aspx

Когда вы хотите игнорировать элемент; вы помечаете его как атрибут [IgnoreDataMember]

Другие вопросы по тегам