C#Json反序列化返回空值

时间:2016-12-09 22:00:06

标签: c# asp.net json asp.net-mvc serialization

所以我将JSON保存在文件中,让我们说test.json。我打开文件,用字符串读取里面的JSON然后我试图将它反序列化为一个对象。文件打开正确,字符串被读取(但转义符出现在字符串中),当我尝试反序列化它时,它返回对象的所有字段的空值,我不明白为什么。

以下是JSON如何保存在文件中:http://pastebin.com/Q6hdiJAD

以下是从文件中读取JSON后如何保存在我的字符串中:http://pastebin.com/HaB480Ww

以下是应该反序列化JSON的代码(我从多个文件中获取多个jsons并反序列化它们并将它们添加到列表中):

List<Root> raw = new List<Root>();    
string[] files = Directory.GetFiles(HostingEnvironment.MapPath("~/Content/Files"));
                foreach (string path in files)
                {
                    using (StreamReader sr = new StreamReader(path))
                    {
                        string json = sr.ReadToEnd();
                        Root root = JsonConvert.DeserializeObject<Root>(json);
                        raw.Add(root);
                    }
                }

这是我的班级:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using APIGovApp.Models;

namespace APIGovApp.Classes
{
    public class XmlModel
    {
        public string Staff { get; set; }
        public List<Nomenclator> noms { get; set; }
    }

    public class Root
    {
        public XmlModel nom_localitati { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace APIGovApp.Models
{
    public class Nomenclator
    {
        public int cod_jud { get; set; }
        public int cod { get; set; }
        public int cod_pol { get; set; }
        public string denumire { get; set; }
        public string cod_tpl { get; set; }
        public int cod_postal { get; set; }
        public string cod_sar { get; set; }
        public int cod_loc_jud { get; set; }
        public int loc_cod { get; set; }
        public string are_primarie { get; set; }
        public int cod_fiscal_primarie { get; set; }
        public int cod_politie_tata { get; set; }
        public string sar_cod_mf { get; set; }
        public int cod_siruta { get; set; }
        public int cod_siruta_tata { get; set; }
    }
}

我参加比赛,我需要尽快完成比赛。请帮忙。

1 个答案:

答案 0 :(得分:0)

在我看来,列表属性的名称并不匹配。

在代码中:

public List<Nomenclator> noms { get; set; }

在档案中:

{"NOM_LOCALITATI":{"Staff":null,"rand":

注意noms vs. rand

将noms重命名为rand,或者通过添加以下属性为解析器提供提示:

 [JsonProperty(PropertyName = "rand")]
 public List<Nomenclator> noms { get; set; }