从文本文件C#中读取Json数据

时间:2016-07-04 08:15:48

标签: c# json list

我有一个包含以下格式数据的文本文件

[
    {
        "SponsorID": 1,
        "FirstBAID": 7395836
    },
    {
        "SponsorID": 2,
        "FirstBAID": 3509279,
        "SecondBAID": 2947210
    },
    {
        "SponsorID": 3,
        "FirstBAID": 1776294,
        "SecondBAID": 6503843
    },
    {
        "SponsorID": 4,
        "FirstBAID": 8014528,
        "SecondBAID": 6203155
    },
    {
        "SponsorID": 5,
        "FirstBAID": 5968769,
        "SecondBAID": 7410195,
        "ThirdBAID":8950170,
    }
]

我想将此数据作为List& amp;然后我需要通过SponsorID查询。 我创建了一个这样的类

public class SponsorInfo
{
    public decimal SponsorID { get; set; }
    public decimal FirstBAID { get; set; }
    public decimal SecondBAID { get; set; }
    public decimal ThirdBAID { get; set; }
}

现在我如何阅读文本文件数据&绑定 SponsorInfo 类?

4 个答案:

答案 0 :(得分:9)

从NuGet包管理器控制台安装Newtonsoft.Json nuget包:

PM> Install-Package Newtonsoft.Json

然后:

var jsonText = File.ReadAllText("filepath");
var sponsors = JsonConvert.DeserializeObject<IList<SponsorInfo>>(jsonText);

要查询SponsorID,您可以使用LINQ:

var sponsor5 = sponsors.FirstOrDefault(x => x.SponsorID == 5);

如果您经常需要按SponsorID进行查找,则可以将结果转换为密钥为SponsorID的字典。这将提高性能,因为它不需要为每个查找枚举整个列表。我还建议您将SponsorID的类型更改为int而不是decimal

var sponsorsById = sponsors.ToDictionary(x => x.SponsorID);

然后您可以轻松访问它:

if (sponsorsById.ContainsKey(5))
    var sponsor5 = sponsorsById[5];

答案 1 :(得分:3)

您需要安装Newtonsoft.Json,然后您需要使用它:

using Newtonsoft.Json;

class Program
    {
         public void LoadJson()
        {
            using (StreamReader r = new StreamReader("file.json"))
            {
                string json = r.ReadToEnd();
                List<SponsorInfo> items = JsonConvert.DeserializeObject<List<SponsorInfo>>(json);
            }
        }


        public class SponsorInfo
        {
            public decimal SponsorID { get; set; }
            public decimal FirstBAID { get; set; }
            public decimal SecondBAID { get; set; }
            public decimal ThirdBAID { get; set; }
        }




        static void Main(string[] args)
        {
            dynamic array = JsonConvert.DeserializeObject(json);
            foreach (var item in array)
            {
                Console.WriteLine("{0} {1}", item.temp, item.vcc);
            } 

        }

    }

答案 2 :(得分:1)

通过创建列表对象来扩展类

public class SponsorInfo
{
    public decimal SponsorID { get; set; }
    public decimal FirstBAID { get; set; }
    public decimal SecondBAID { get; set; }
    public decimal ThirdBAID { get; set; }
}
public class SponsorInfoList
{
    public Dictionary<string, SponsorInfo> SIList { set; get; }
}

将文件反序列化为,

var obj = JsonConvert.DeserializeObject<SIList >(File.ReadAllText(FileName));

然后你就可以阅读了,

foreach(var listItem in res.SIList )
{
    Console.WriteLine("SponsorID ={0}, FirstBAID ={1},  SecondBAID ={2}, ThirdBAID ={3}", listItem.SponsorID, listItem.FirstBAID, listItem.SecondBAID, listItem.ThirdBAID );
}

可能存在语法错误,但方法仍然相同。

随时留言!

答案 3 :(得分:-1)

您需要反序列化到您的对象中,如:

赞助商赞助商= jsonConvert.DeserializeObject(json);