Silverlight 4 DataContractJsonSerializer, частные поля производного класса - PullRequest
0 голосов
/ 19 ноября 2011

Я использую DataContractJsonSerializer для десериализации данных JSON в Silverlight 4. Имена ключей данных Json не совпадают с именами свойств моего класса; так что я думаю, что я должен использовать DataMemberAttribute. Поэтому я сделал следующее:

[DataContract]
public class Person : Model
{
    [DataMember(Name = "id")]
    private int _id;
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    [DataMember(Name = "name")]
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

Теперь десериализация завершается неудачно, потому что я не применил DataContractAttribute к модели базового класса Person. Это строгое требование? Кроме того, после того, как я применил DataContractAttribute к Model, десериализация снова не удалась, потому что я применил атрибуты DataMember к частным полям, а не к публичным свойствам. Почему я не могу применить их к частным пользователям (документация говорит об обратном).

ПРИМЕЧАНИЕ: серверный код не является ASP.NET; поэтому WCF не используется.

1 Ответ

1 голос
/ 19 ноября 2011

Для того, чтобы приватные члены могли правильно сериализоваться через WCF, нам пришлось изменить их все на protected internal вместо private.Может быть, то же самое относится к DataContractJsonSerializer?

...