将某些JSON属性反序列化为子类

时间:2011-12-28 13:10:34

标签: c# json serialization

public class ApiResponse<T> : IApiResponse<T>
{
    public long QuotaRemaining { get; set; }
    public long QuotaMax { get; set; }
    public int Backoff { get; set; }
    public bool HasMore { get; set; }
    public long Total { get; set; }
    public string Type { get; set; }
    //public long ErrorId { get; set; }
    //public string ErrorMessage { get; set; }
    //public string ErrorName { get; set; }
    public IList<T> Items { get; set; }

    public ApiError Error { get; set; }
}

public class ApiError
{   
    [JsonProperty("error_id")]
    public long ErrorId { get; set; }

    [JsonProperty("error_message")]
    public string ErrorMessage { get; set; }

    [JsonProperty("error_name")]
    public string ErrorName { get; set; }
}

事情是Error属性实际上与ApiResponse<T>处于同一级别,但是我想将它们包装成ApiError类,我怎么能实现这个?

我目前正在反序列化:

    public static T DeserializeJson<T>(this string json)
    {
        return JsonConvert.DeserializeObject<T>(json);
    }

我想有一些属性允许我很容易地完成这个,但我无法弄清楚应该是什么配置。

1 个答案:

答案 0 :(得分:0)

您可以通过装饰来选择和序列化哪些属性。

添加[ScriptIgnore]将导致属性不被序列化。这并不真正创建子类,但确实提供了一种仅序列化所选属性的方法。

免责声明:我只使用JavaScriptSerializer类创建了JSON。

示例:

public class ApiResponse<T> : IApiResponse<T>
{
    [ScriptIgnore]
    public long QuotaRemaining { get; set; }
    [ScriptIgnore]
    public long QuotaMax { get; set; }
    public int Backoff { get; set; }
    public bool HasMore { get; set; }
}

在上面的课程中,只会序列化BackoffHasMore属性。