【问题标题】:Deserialize JSON to class in C#将 JSON 反序列化为 C# 中的类
【发布时间】:2017-02-08 10:07:25
【问题描述】:

如果我的 string(json) 只包含以下部分,我可以借助 newtonsoft 的库对其进行反序列化。

{"Code": "MXXXXX", "Status": "failed"}

要反序列化的代码:

public class Account
{
    public string Code{ get; set; }
    public string Status{ get; set; }
}
Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.Code);

但是如果我的字符串是这样的:

{'data': ' {"Code": "MXXXXX", "Status": "failed"}'}

我无法反序列化。在这里,该类只有一个属性,即数据...我该怎么做?

【问题讨论】:

  • 将你的 json 字符串放在jsonutils.com 并为该类型生成所需的代码

标签: c# asp.net json


【解决方案1】:

您将需要另一个类来包装实际帐户,例如:

public class Account
{
    public Data Data { get; set };
}

public class Data
{
    public string Code{ get; set; }
    public string Status{ get; set; }
}

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account .Data.Code);

【讨论】:

  • 确保两个类都有一个空的(无参数)构造函数
  • 感谢彼得的帮助。但我在 derilize.Error 是“无法从 System.String 转换或转换为数据”的地方遇到错误。 '.Json 是我的字符串。
【解决方案2】:

试试这个

public class Account
{
    public string Code { get; set; }
    public string Status { get; set; }
}


public class AccountWrapper
{
    [JsonProperty(PropertyName = "data")]
    public string Data { get; set; }

    public Account Account
    {
        get { return JsonConvert.DeserializeObject<Account>(Data); }
    }
}

// DeserializeObject
        string data = "{'data':'{\"Code\":\"MXXXXX\",\"Status\":\"failed\"}'}";

        var account = JsonConvert.DeserializeObject<AccountWrapper>(data).Account;

【讨论】:

    【解决方案3】:

    您可以将整个 json 反序列化为 JObject,然后将其中的一部分解析为 Account:

    JObject wholeJson = JObject.Parse(json);
    JToken dataToken = wholeJson.GetValue("data");
    Account account = dataToken.ToObject<Account>();
    

    【讨论】:

    • Getvalue 方法出错。方法不可见。
    • @JuiTest,您使用的是哪个版本的 Json.net?这是文档中的这种方法:GetValue
    • 我正在使用'Newtonsoft.Json.Net20.dll'
    【解决方案4】:

    我的建议是,您可以准备与 json 结构相同的对象。喜欢,

    public class Test
    {
        public string data{ get; set; }        
    }
    

    您可以从对象中获取数据并像现在一样反序列化它。 或者在JObject中读取,然后获取数据并反序列化。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多