反序列化json问题 - 继承了linq2SQL对象

时间:2012-03-25 10:15:28

标签: c# asp.net json.net deserialization anonymous-methods

我在我的网络应用中使用了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, “类别ID”:636, “ParentCategoryID”:635, “类别名称”: “propForRent”, “CategoryImageFN”:空}]

当我调用deserialze对象方法时

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

其中T是List 结果:显示“ActiveAdsCount”和“DisplaySequence”具有0值,而json显示来自数据库的正确信息。所以,问题在于反序列化。

我使用的是.Net 4.0 framework的Newtonsoft.Json.dll的4.5.1版本

1 个答案:

答案 0 :(得分:1)

此外,我已使用DataContract属性标记了我的CategoryEntity类,并将其成员标记为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非常感谢您的评论。