如何反序列化其中包含无效字段名称的JSON对象 [英] How to Deserialize an JSON object with invalid field name in it

查看:127
本文介绍了如何反序列化其中包含无效字段名称的JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下结构的JSON请求:

I have a JSON request which has follwing structure:

"formats":  {
        "flash_embed": "http://a3.vikiassets.com/assets/vikiplayer-922746a667cfd38137a7e45df6ba1b95.swf?auto_play=true&language_codes=en&media_id=74965&partner=16&source=api_v3",
        "m3u8": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965/ios.m3u8",
        "res-150p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_mp4cell_150.mp4",
        "res-240p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_240p.mp4",
        "res-270p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_270p.mp4",
        "res-360p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_360p.mp4",
        "res-480p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_480p.mp4",
        "res-720p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_720p.mp4"
      }
    }

现在,res-150p在C#中说出无效的名称,如果我给它起另一个名字,则在进行不合要求的处理时我没有得到任何值,res-150p内部为空.

Now res-150p, says invalid name in C# and if I give another name to it then while desiralizing I am not getting any values, that is null inside res-150p.

修改: [可序列化] MoviesListRootObject是包含Response的根对象,然后Response包含Formats

[Serializable] MoviesListRootObject is the root Object which Contains Response and then Response Contains Formats

public class MoviesListRootObject
{
    public int count { get; set; }
    public Pagination pagination { get; set; }
    public List<Response> response { get; set; }
}

[Serializable]
public class Response
{
    public int id { get; set; }
    public int channel_id { get; set; }
    public string title { get; set; }
    public string title_language { get; set; }
    public string description { get; set; }
    public string description_language { get; set; }
    public string created_at { get; set; }
    public string uri { get; set; }
    public string web_uri { get; set; }
    public List<object> genres { get; set; }
    public string origin_country { get; set; }
    public string image { get; set; }
    public Subtitles subtitles { get; set; }
    public Formats formats { get; set; }
}

[Serializable]
public class Formats
{
    public string flash_embed { get; set; }
    public string m3u8 { get; set; }
    public string __invalid_name__res150p { get; set; }
    public string __invalid_name__res240p { get; set; }
    public string __invalid_name__res270p { get; set; }
    public string __invalid_name__res360p { get; set; }
    public string __invalid_name__res480p { get; set; }
    public string __invalid_name__res720p { get; set; }
    public string __invalid_name__flv480p { get; set; }
    public string __invalid_name__flv360p { get; set; }
    public string __invalid_name__flv270p { get; set; }
    public string __invalid_name__flvvp6360p { get; set; }
    public string __invalid_name__flvvp6270p { get; set; }
}

推荐答案

您必须用JsonProperty属性修饰Formats属性,以告诉它如果名称不完全匹配该怎么办:

You have to decorate your Formats properties with JsonProperty attributes to tell it what goes where if the name does not exactly match:

partial class Formats
{
    [JsonProperty("res-150p")]
    public string __invalid_name__res150p {get; set;}
}

另请参见使用JsonConvert.DeserializeObject将Json反序列化为C#POCO类

这篇关于如何反序列化其中包含无效字段名称的JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆