Десериализация проблемы json - унаследованный объект linq2SQL - PullRequest
0 голосов
/ 25 марта 2012

Я использовал объекты Linq-to-SQL в своем веб-приложении. Мои базовые и унаследованные классы выглядят так:

//Base Class: this will define the attributes that is auto-generated
//when using Linq-2-SQL ORM. Note this class is a partial class
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Categories")]
[global::System.Runtime.Serialization.DataContractAttribute()]
public partial class Category : INotifyPropertyChanging, INotifyPropertyChanged 


//Inherited Class:
[Serializable]
public class CategoryEntity : Category
{
    private int _ActiveAdsCount;

    public int ActiveAdsCount
    {
        get
        {
            return _ActiveAdsCount;
        }

        set
        {
            _ActiveAdsCount = value;
        }
    }

    public int DisplaySequence { get; set; }

}

при сериализации, JSON OUTPUT (обратите внимание на значения ActiveAdsCount и DisplaySequence):

[{ "ActiveAdsCount": 3429, "DisplaySequence": 99, "CategoryID": 636, "ParentCategoryID": 635, "CategoryName": "propForRent", "CategoryImageFN": нулевой}]

Когда я вызываю метод объекта десериализации

result = JsonConvert.DeserializeObject<T>(responseText);

где T - список Результат: он показывает, что «ActiveAdsCount» и «DisplaySequence» имеют 0 значений, в то время как json показывает правильную правильную информацию, поступающую из базы данных. Итак, проблема в десериализации.

Я использую версию Newtonsoft.Json.dll версии 4.5.1 .Net 4.0 framework

1 Ответ

1 голос
/ 26 марта 2012

Более того, я пометил свой класс CategoryEntity атрибутом DataContract и его членами в Datamember для целей сериализации.Я замечаю, что атрибут Serialization делает сериализуемым только экземпляр, но не его членов.Итак, новый класс выглядит так:

[DataContract]
public class CategoryEntity : Category
{
    [DataMember]
    public int ActiveAdsCount { get; set; }

    [DataMember]
    public int DisplaySequence { get; set; }

    [DataMember]
    public IList<CategoryEntity> SubCategories { get; set; }

    [DataMember]
    public IList<BasicCategoryInfo> SubCategoriesBasicInfoList { get; set; }

    [DataMember]
    public string ParentCategoryNameEn { get; set; }

    [DataMember]
    public int CityID { get; set; }
}

@ JasonJong Большое спасибо за ваш комментарий.

...