首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonConvert ends函数

JsonConvert ends函数
EN

Stack Overflow用户
提问于 2018-05-29 00:08:12
回答 1查看 136关注 0票数 0

我正在尝试将一个字符串形式的json对象从前端转换到中间层。我正在使用NewtonSoft.Json.JsonConvert.DeserializeObject.我没有收到任何错误。但是,当我设置断点时,我看到函数在调用反序列化时退出。它不会继续进行。这是我的代码。

代码语言:javascript
复制
public class tranx
{
    public Transaction transaction { get; set; }
    public List<LineItem> lineItems { get; set; }
}

[HttpGet]
public ActionResult saveTransaction(string transactionJson)
{
    tranx t = JsonConvert.DeserializeObject<tranx>(transactionJson);
    foreach (LineItem i in t.lineItems)
    {
        if (i != null)
        {
            Console.Write(i.CategoryID);
        }
    }
     return View();
}

注意: Transaction和LineItem也是我定义的对象,可以访问。

我不确定为什么代码在foreach循环之前退出。有什么想法吗?

下面是json字符串:

代码语言:javascript
复制
{
   "transaction":[
      {
         "entityID":"",
         "date":"2018-05-28"
      }
   ],
   "lineItems":[
      {
         "category":"",
         "subCategory":"",
         "amount":"",
         "tax":0,
         "description":"",
         "miles":"",
         "gallons":""
      },
      {
         "category":"",
         "subCategory":"",
         "amount":"",
         "tax":0,
         "description":"",
         "miles":"",
         "gallons":""
      }
   ]
}

另外,我没有使用任何自定义的反序列化程序。

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 00:28:56

我相信实际发生的情况是抛出了一个这样的异常:

未处理的异常: Newtonsoft.Json.JsonSerializationException:无法将当前JSON数组(例如1,2,3)反序列化为类型“Transaction”,因为该类型需要JSON对象(例如{"name":"value"})才能正确反序列化。

这是由于您的JSON将transaction属性指定为数组:

日期“事务”:{“entityID”:“”,“

”:“2018-05-28”}

..。而您的transaction属性只是一个Transaction

下面的示例代码展示了这一点--只需将示例JSON放在test.json

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

public class tranx
{
    public Transaction transaction { get; set; }
    public List<LineItem> lineItems { get; set; }
}

public class LineItem { }
public class Transaction { }

class Program
{
    static void Main()
    {
        string json = File.ReadAllText("test.json");
        tranx t = JsonConvert.DeserializeObject<tranx>(json);
    }
}

因此,您有两个问题需要解决:

  • 假设您的JSON是正确的,那么您的tranx类需要更改,以便它的transaction属性是列表或数组,例如

通讯录事务{ get;set;}

  • 您应该找出无法查看异常的原因。这真的很重要。如果抛出异常,而您看不到它们,那么维护代码将非常困难。这实际上是我要解决的第一件事。

我还强烈建议您遵循.NET命名约定,其中属性和类型名称都是大写的。您可以使用JSON属性来指定如何在[JsonProperty]中表示值,如果这是以前属性为小写的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50570115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档