簡體   English   中英

將類序列化為 .json 文件

[英]Serializing class to .json file

只是想做一個簡單的序列化(第一次嘗試)。 直到我改變了一些東西並添加了反序列化並添加了一個使我的其他方式不再起作用的類之前,實際上已經開始工作了。

基本上,我將反序列化 json 的內容用於對象,並試圖顛倒事物的順序。 但現在我在 foreach 循環中遇到錯誤,我不確定是否需要。 一旦我讓序列化工作,我相信我也會在字符串進入 .json 文件時被困在如何格式化字符串上,以便它正確附加,但那是另一天。

這是我收到的錯誤

System.NullReferenceException: '未將對象引用設置為對象的實例。'

我在foreach(var translogs in Logs.transLogs)行上收到此異常foreach(var translogs in Logs.transLogs)

這是我的活動。

代碼

private void toolPull_Click(object sender, EventArgs e)
{
    double cost = Convert.ToDouble(active_Cost.Text);
    int serial = Convert.ToInt32(transactionSerial_Box.Text);
    DateTime timeNow = DateTime.Now;
    TransactionLogs Logs = new TransactionLogs();
    foreach(var translogs in Logs.transLogs)
    {
        translogs.Employee = transactionEmployee_Box.Text;
        translogs.Serial = serial;
        translogs.Cost = cost;
        translogs.Description = active_Description.Text;
        translogs.CurrentDate = timeNow;
    }

    string stringJson = JsonConvert.SerializeObject(Logs);
    StreamWriter sw = new StreamWriter(@"C:\transactionlog.json", append: true);
    sw.WriteLine(stringJson);
    sw.Close();
}

這是使用 json 的類

namespace QuickType
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class TransactionLogs
    {
        [JsonProperty("TransactionLog")]
        public List<TransactionLog> transLogs { get; set; }
    }

    public partial class TransactionLog
    {
        [JsonProperty("employee")]
        public string Employee { get; set; }

        [JsonProperty("currentDate")]
        public DateTime CurrentDate { get; set; }

        [JsonProperty("serial")]
        public int Serial { get; set; }

        [JsonProperty("description")]
        public string Description { get; set; }

        [JsonProperty("isPull")]
        public bool IsPull { get; set; }

        [JsonProperty("cost")]
        public double Cost { get; set; }
    }
}

這是json文件

{
   "TransactionLog":[
      {
         "employee":"Joey",
         "currentDate":"2021-11-03T11:49:13.5741628-04:00",
         "serial":1111,
         "description":"1/2-20 Threadmill",
         "isPull":true,
         "_ost":25.68
      },
      {
         "employee":"joey",
         "currentDate":"2021-11-03T11:50:34.6344474-04:00",
         "serial":1000,
         "description":"1/2-20 Threadmill",
         "isPull":true,
         "cost":25.68
      },
      {
         "employee":"john",
         "currentDate":"2021-11-03T11:50:40.9956616-04:00",
         "serial":2000,
         "description":"1/2-20 Threadmill",
         "isPull":true,
         "cost":25.68
      },
      {
         "employee":"Jim",
         "currentDate":"2021-11-03T11:51:24.5559292-04:00",
         "serial":4565,
         "description":"1/2-20 Threadmill",
         "isPull":true,
         "cost":25.68
      }
   ]
}

讓我在這里記錄評論的結果。

這兩行有兩個問題:

TransactionLogs Logs = new TransactionLogs();
foreach(var translogs in Logs.transLogs)
  • TransactionLogstransLogs集合未初始化,這導致了 NRE
  • 在修復了foreach在一個空集合上經歷的問題之后

第一個問題的修復:

Logs.transLogs = new List<TransactionLog>();

第二個問題的修復:

var transLogs = new TransactionLog()
{
    Employee = transactionEmployee_Box.Text;
    Serial = serial;
    Cost = cost;
    Description = active_Description.Text;
    CurrentDate = timeNow;
};
Logs.transLogs.Add(transLogs);

因此,您必須通過添加新成員來填充它,而不是遍歷空集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM