使用c#

时间:2017-12-27 11:50:04

标签: c# json

我想以这种格式将数据保存在本地json文件中:

[
{"Name":"sdafdsf","Password":"dsfads","FirstName":"fsdf","LastName":"dsfdafas"},
{"Name":"sddafdsf","Password":"dsfadds","FirstName":"fdsdf","LastName":"dsfdafasdfs"} 
]

我在控制器中使用它来序列化为json格式:

 public ActionResult Index(demo obj)
        {

            String json = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
            string path = Server.MapPath("~/app/");
            //// Write that JSON to txt file,  
            //var read = System.IO.File.ReadAllText(path + "output.json");
            System.IO.File.WriteAllText(path + "output.json",  json);
            return View();
        }

这是我的模特:

public class demo
    {

        public string Name { get; set; }
        public string Password { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

但是我没有使用正确的JSON格式,而是在我的output.json文件中找到它:

{"Name":"sdafdsf","Password":"dsfads","FirstName":"fsdf","LastName":"dsfdafas"}{"Name":"adfsdsfsafdsafasdfsdfsadf","Password":"dfsaasdsa","FirstName":"safd","LastName":"dfsafads"}

如何以正确的格式保存数据?

2 个答案:

答案 0 :(得分:2)

这是正确的格式,如果你的意思是你需要它像一个数组然后将对象添加到一个数组,然后序列化它:

 public ActionResult Index(demo obj)
        {
    var array = new [] {obj};
            String json = Newtonsoft.Json.JsonConvert.SerializeObject(array);
            string path = Server.MapPath("~/app/");
            //// Write that JSON to txt file,  
            //var read = System.IO.File.ReadAllText(path + "output.json");
            System.IO.File.WriteAllText(path + "output.json",  json);
            return View();
        }  

或者:

var list = new List<demo>();
list.Add(obj);
String json = Newtonsoft.Json.JsonConvert.SerializeObject(list);

如果您想将数据始终保存在数组中,那么您始终需要:

  1. 从json文件中读取数据。
  2. 淡化为“List&#39;。
  3. 的列表
  4. 将新项目添加到此列表中。
  5. 再次序列化并将其保存在该文件上,用新文本替换所有旧文本。
  6. 像这样:

     public ActionResult Index(demo obj)
            {
              string path = Server.MapPath("~/app/");
            var read = System.IO.File.ReadAllText(path + "output.json");
            List<demo> lst = Newtonsoft.Json.JsonConvert.DeserializeObject<List<demo>>(read);
            if (lst == null)
            {
                List<demo> _data = new List<demo>();
                _data.Add(obj);
               String json = Newtonsoft.Json.JsonConvert.SerializeObject(_data.ToArray());
                System.IO.File.WriteAllText(path + "output.json", json);
            }
            else
            {
                lst.Add(obj);
                String json = Newtonsoft.Json.JsonConvert.SerializeObject(lst);
                System.IO.File.WriteAllText(path + "output.json", json);
            }
            return View();
            }  
    

    当然,您可以通过单独的部分编写更清晰的代码。

答案 1 :(得分:0)

首先创建一个对象列表,然后尝试序列化列表。我相信你会得到所需的输出。好像你通过序列化单个对象使用了AppendAllText方法。