【问题标题】:Why is my JsonConvert not converting correctly [closed]为什么我的 JsonConvert 不能正确转换 [关闭]
【发布时间】:2021-03-13 23:17:53
【问题描述】:

我正在从 API 获取数据并希望将其转换为对象列表

// Get the data
var searchResult = GetResults();
string[] data = (string[]) searchResult.Data;
string headers = searchResult.Headers;

// Combine the data into CSVish format
var sb = new StringBuilder();
sb.AppendLine(headers);

foreach(var recordString in data){
    sb.AppendLine(recordString);
}

// Convert to a new a JsonFormat
/* This is where the issue is. I get the an exeption */
var convertedData = JsonConvert.DeserializeObject<List<ConvertedModel>>(sb.ToString());

数据返回示例:

{
 "Headers": "Name, subject, score, prevScore"
 "Data":[
    "Jhon,Math,24.54, 30",
    "Jhon,English,,28.23",
    "Jhon,Art,13.53,12",
    "Joe,Math,27.01,",
    "Joe,English,,",
 ]

转换后的模型我要转换的示例:

public class ConvertedModel {
    public string Name { get; set; }
    public string Subject { get; set; }
    public decimal Score { get; set; }
    public decimal PrevScore { get; set; }
}

异常消息:

System.Reflection.TargetInvocationException: '异常已被 被调用的目标抛出。'

内在的例外:

ArgumentNullException:值不能为空。参数名称:值

【问题讨论】:

  • minimal reproducible example。简而言之,我粘贴了您的代码,但它无法编译
  • “这就是问题所在” - 你忘了告诉我们jsonString 的定义和使用方式。也许jsonStringnull
  • 我猜他错过了jsonString = sb.ToString();
  • 在示例中我确实错过了 'jsonString = sb.ToString();'然而,原来的问题仍然存在。根据@TheGeneral 的要求对其进行了更新并使其更加完整

标签: c# json jsonconvert


【解决方案1】:

既然您已经完成了将结果转换为类似 CSV 格式的工作,那么我将继续沿着这条路线走下去。请注意,我包括了 nuget 包 Newtonsoft.Json 和 FileHelpers:

using System;
using System.Text;
using System.Collections.Generic;
using Newtonsoft.Json;
using FileHelpers;
                    
public class Program
{
    public static void Main()
    {
        /*var searchResult = GetResults();
        string[] data = (string[]) searchResult.Data;
        string headers = searchResult.Headers;

        // Combine the data into CSVish format
        var sb = new StringBuilder();
        sb.AppendLine(headers);

        foreach(var recordString in data){
            sb.AppendLine(recordString);
        }*/
        var sb = new StringBuilder();
        sb.Append(@"Name, subject, score, prevScore
Jhon,Math,24.54, 30
Jhon,English,,28.23
Jhon,Art,13.53,12
Joe,Math,27.01,
Joe,English,,");

        // Convert to a new a JsonFormat
        /* This is where the issue is. I get the an exeption */
        //var convertedData = JsonConvert.DeserializeObject<List<ConvertedModel>>(sb.ToString());
        var engine = new FileHelperEngine<ConvertedModel>();
        var convertedData = engine.ReadString(sb.ToString());
    }
    
    [DelimitedRecord(",")]
    [IgnoreFirst(1)]
    public class ConvertedModel {
        public string Name { get; set; }
        public string Subject { get; set; }
        [FieldOptional]
        public decimal? Score { get; set; }
        [FieldOptional]
        public decimal? PrevScore { get; set; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2016-08-15
    • 1970-01-01
    • 2013-05-07
    • 2013-12-09
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多