簡體   English   中英

Newtonsoft.Json.JsonSerializationException: C#

[英]Newtonsoft.Json.JsonSerializationException: C#

再會!

我在反序列化 JSON 字符串時遇到問題

這是我的 function 的樣子:

 public static void Deserialised()
    {
        string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
                            "\"responseText\":\"Approved\"," +
                            "\"status\":\"A\"," +
                            "\"txnDate\":\"20220321\"," +
                            "\"txnId\":\"000067\"," +
                            "\"txnTime\":\"1049\"," +
                            "\"txnType\":\"sale\"," +
                            "\"amt\":\"109\"}," +
                            "\"dataType\":\"trans\"}";

        Root myDeserializedJson = JsonConvert.DeserializeObject<Root>(jsonString); //Error popup here!

        foreach (var datas in myDeserializedJson.data)
        {
            Console.WriteLine(datas.merchantRefNo);
        }
    }

這是我的 Model:

 public class Data
    {
        public string merchantRefNo { get; set; }
        public string responseText { get; set; }
        public string status { get; set; }
        public string txnDate { get; set; }
        public string txnId { get; set; }
        public string txnTime { get; set; }
        public string txnType { get; set; }
        public string amt { get; set; }
    }

    public class Root
    {
        public List<Data> data { get; set; }
        public string dataType { get; set; }
    }

錯誤:

Newtonsoft.Json.JsonSerializationException: '無法將當前的 JSON object(例如 {"name":"value"})反序列化為類型 'System.Collections.Generic.List`1[fortestings.Program+Data]' 因為該類型需要一個JSON 數組(例如 [1,2,3])以正確反序列化。 要修復此錯誤,請將 JSON 更改為 JSON 數組(例如 [1,2,3])或更改反序列化類型,使其成為正常的 .NET 類型(例如,不是像 integer 這樣的原始類型,不是像數組或列表)可以從 JSON object 反序列化。也可以將 JsonObjectAttribute 添加到類型以強制它從 JSON object 反序列化。路徑“data.merchantRefNo”,第 1 行,88117734 73.78

{ "data":{ "merchantRefNo":"foo", "responseText":"Approved", "status":"A", "txnDate":"20220321", "txnId":"000067", "txnTime": "1049", "txnType":"sale", "amt":"109" }, "dataType":"trans" }

這是你的根 object JSON 但你 class 期待數據列表

public class Root
{
    public **List<Data>** data { get; set; }
    public string dataType { get; set; }
}

因此,反序列化 json 與您的 model 不匹配。您的 Json 應該如下所示":"20220321", "txnId":"000067", "txnTime":"1049", "txnType":"sale", "amt":"109" }], "dataType":"trans" }

在您的Root class 中,將List<Data> data更改為Data data ,然后您可以根據需要將JSON字符串反序列化到您的Root class:

using System;
using Newtonsoft.Json;
                    
public class Program
{
    public static void Main()
    {
        string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
            "\"responseText\":\"Approved\"," +
            "\"status\":\"A\"," +
            "\"txnDate\":\"20220321\"," +
            "\"txnId\":\"000067\"," +
            "\"txnTime\":\"1049\"," +
            "\"txnType\":\"sale\"," +
            "\"amt\":\"109\"}," +
            "\"dataType\":\"trans\"}";
        
        var result =JsonConvert.DeserializeObject<Root>(jsonString);
        Console.WriteLine(result.dataType);
        Console.WriteLine(result.data.merchantRefNo);
        Console.WriteLine(result.data.status);
        Console.WriteLine(result.data.txnId);           
    }
}

public class Data
{
    public string merchantRefNo { get; set; }
    public string responseText { get; set; }
    public string status { get; set; }
    public string txnDate { get; set; }
    public string txnId { get; set; }
    public string txnTime { get; set; }
    public string txnType { get; set; }
    public string amt { get; set; }
}

public class Root
{
    public Data data { get; set; }
    public string dataType { get; set; }
}

Output:

trans
foo
A
000067

你可以在這里找到一個工作示例: https://do.netfiddle.net/8Nsl9m

暫無
暫無

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

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