【问题标题】:deserialize string to c# object using newtonsoft.json [closed]使用 newtonsoft.json 将字符串反序列化为 c# 对象 [关闭]
【发布时间】:2018-11-21 22:37:09
【问题描述】:

我有一个如下所示的 json 字符串

value = {
    {
        "Type": "P1",    
        "IsAvailable": "1",  
        "Logics": {
            "ID": "B",
            "ID": "X",
            "ID": "B"
        }
    }
}

它应该被反序列化为 C# 类对象,如下所示

public class CatType
{
    public string Type { get; set; }
}

public class Logic
{
    public string ID{ get; set; }
}

当我尝试使用以下语句反序列化时,我遇到了异常

CatType _catType= JsonConvert.DeserializeObject<CatType >(value.ToString());

成功反序列化对象需要做什么?

我尝试了不同的方法来解决问题,但没有解决

【问题讨论】:

  • i am getting exception 哪个例外?
  • 如果您能提供minimal reproducible example,那就太好了。 最常见的原因是无效的 JSON,minimal reproducible example 将帮助我们更快地发现它。
  • JSON 字符串是否与您发布的完全一致?如果是这样,那不是有效的 JSON。尝试在jsonlint.com 中验证它,你就会明白我的意思。从字符串中删除value=
  • 你如何反序列化它?你得到了哪个例外。请提供MCVE

标签: c# json asp.net-web-api json.net


【解决方案1】:

您的类对于该 json 类型不正确。您需要在 CatType 中有一个逻辑集合。 CatType 中也不存在 IsAvailable。结构看起来更像这样。

public class CatType
{
    public string Type { get; set; } 
    public string IsAvailable { get; set; }
    public List<Logic> Logics { get; set; }
}

public class Logic
{
    public string ID{ get; set; }
}

你的 json 也是无效的。 Logics 对象有 3 个名称为 ID 的属性,这是不允许的。它应该是一个数组类型。像这样

value={
    {
        "Type": "P1",    
        "IsAvailable": "1",  
        "Logics": [
            "ID": "B",
            "ID": "X",
            "ID": "B"
        ]
    }
}

【讨论】:

  • 我已经修改并尝试了我得到以下异常
  • 成功了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
相关资源
最近更新 更多