【问题标题】:Error in reading JSON file读取 JSON 文件时出错
【发布时间】:2014-10-23 04:13:17
【问题描述】:

我需要解析/读取这个 json 文件。

   [{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"interior","shotTypeAbbreviation":"I","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_i_oem_1_423.jpg"],"source":"OEM","vdpOrder":3},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"R","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_r_oem_1_300.jpg"],"source":"OEM","vdpOrder":6},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"RQ","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_1_196.jpg"],"source":"OEM","vdpOrder":2},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"FQ","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_1_396.jpg"],"source":"OEM","vdpOrder":1},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"RQ","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_rq_oem_2_400.jpg"],"source":"OEM","vdpOrder":7},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"FQ","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_98.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_fq_oem_2_175.jpg"],"source":"OEM","vdpOrder":5},{"children":[],"id":"dam/photo/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1","site":"dam","authorNames":["Volvo Cars of North America, Inc."],"captionTranscript":"2001 Volvo V70 XC AWD 4dr Wagon ","type":"PHOTOS","subType":"exterior","shotTypeAbbreviation":"S","photoSrcs":["/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_185.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_400.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_131.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_196.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_396.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_87.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_276.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_300.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_423.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_175.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_500.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_150.jpg","/volvo/v70/2001/oem/2001_volvo_v70_wagon_xc_s_oem_1_98.jpg"],"source":"OEM","vdpOrder":4}]

这是我使用 JSON.net 反序列化它的类代码

 public class Photo
    {

        public List<Children> children;

    }
    public class Children
    {
        public string id;
        public string site;
        public List<string> authorNames;
        public string captionTranscript;
        public string type;
        public string subType;
        public string shotTypeAbbreviation;
        public List<string> photoSrcs;
        public string source;
        public string vdpOrder;
    }

    StreamReader sr = new StreamReader(_filename);
    string str = sr.ReadToEnd();

    sr.Close();

    Photo p = JsonConvert.DeserializeObject<Photo>(str);// this line gives error

但我遇到了错误

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“WindowsFormsApplication1.Photo”,因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组中反序列化。 路径'',第 1 行,位置 1。

【问题讨论】:

  • 请显示您遇到的错误。
  • 我没有看到任何代码,只有两个类。
  • 代码 + 错误更新
  • 这是无效的 json。将其剪切/粘贴到 jsonlint 中会在 Volvo [errorhere] Cars of North America 处显示错误,可能是因为那里有换行符。
  • 文件有点长,所以我尝试剪切它。现在原始文件在那里,用 jsonlint 验证器检查

标签: c# json visual-studio-2008


【解决方案1】:

您的 json 是一个数组/列表。所以反序列化为一个列表。

var photos = JsonConvert.DeserializeObject<List<Photo>>(json);

public class Photo
{
    public List<object> children { get; set; }
    public string id { get; set; }
    public string site { get; set; }
    public List<string> authorNames { get; set; }
    public string captionTranscript { get; set; }
    public string type { get; set; }
    public string subType { get; set; }
    public string shotTypeAbbreviation { get; set; }
    public List<string> photoSrcs { get; set; }
    public string source { get; set; }
    public int vdpOrder { get; set; }
}

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2019-04-27
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多