从JSON文件加载数据一次

时间:2016-07-26 08:49:11

标签: c# json singleton

我有一个json文件,其中存储了一些行,如下所示..

[
  {
    "Id": "1",
    "Name": "A"
  },
  {
    "Id": "2",
    "Name": "B"
  }
]

我正在尝试将其加载到类的集合中。这些数据是静态的,不会改变,所以我只需加载一次。

我创建了一个类并在私有构造函数中加载它并加载到我在类中的集合中。

    public sealed class JsonLoader : IJsonloader
    {
        private readonly IEnumerable<Product> products = new List<Product>();

        private JsonLoader()
        {
            using (var r = new StreamReader("data.json"))
            {
                var json = r.ReadToEnd();
                products = //deserialse the json here 
            }
        }

        public static IEnumerable<Product> Products => this.products;
    }

使用结构图单例选项实现单例。我想知道我的实施方式是否正确或是否可以进一步改进?

还是其他最好的办法吗?任何帮助非常感谢:)

1 个答案:

答案 0 :(得分:0)

好的,所以我做了一个示例,即获取json对象的字符串反序列化它并创建Product对象并将其添加到Product  列表

public class Program
{
    public class Product
    {
        public string Id { get; set; }
        public string Name { get; set; }

    }

    static void Main(string[] args)
    {
        IList<Product> productList = new List<Product>();
        string json = "{\"Id\": 1, \"Name\": \"A\"},{\"Id\": 2, \"Name\": \"B\"}";

        string[] jsonArray = json.Split(new string[] { "},{" }, StringSplitOptions.None);

        foreach (string j in jsonArray)
        {
            string jsonTemp = j.Replace("{", "").Replace("}", "");
            string myJson = "{" + jsonTemp + "}";

            productList.Add(JsonConvert.DeserializeObject<Product>(myJson));
        }

    }
}

<强>输出: 产品列表中有2个对象。

我在Main中做了它,例如,你可以将它带到外部函数,它将字符串作为参数并返回用户列表(这将是最正确的)。