【问题标题】:ReadAsAsync got null values from Json data?ReadAsAsync 从 Json 数据中获取空值?
【发布时间】:2018-08-07 19:06:40
【问题描述】:

我有课

public class C
{
    public int Id { get; set; }
    public SqlXml Range { get; set; } // System.Data.SqlTypes.SqlXml
}

以下代码用于从 web api 读取数据。

    List<C> cs = null;
    var response = await client.GetAsync(url);
    if (response.IsSuccessStatusCode)
    {
        cs = await response.Content.ReadAsAsync<List<C>>(); // cs[..].Range is null
    }

以下是从 Web API 返回的一些示例 Json 文件。

[{"id":0,"range":{"isNull":false,"value":"<Range>....</Range>"}},
 {"id":1,"range":{"isNull":false,"value":"<Range>...</Range>"}},
 {"id":2,"range":{"isNull":false,"value":"<Range>....</Range>"}}]

但是,变量cs 获得了以下值。 Id 值是正确的。但是所有Ranges 都有空值?

0, null
1, null
2, null

调试器显示cs[...].Range.IsNulltrue

【问题讨论】:

  • 上一期解决了吗?
  • 你能显示SqlXml类的定义吗?也许 json.net 无法反序列化该对象,但需要查看它的外观。
  • SqlXml 位于System.Data.SqlTypes。我没有定义它。
  • 好的,我去看看。
  • 那些属性是只读的。

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


【解决方案1】:

System.Data.SqlTypes.SqlXml 的属性是只读的。当反序列化器尝试创建该类型的对象时,它会在尝试设置属性时失败。

创建您自己的类来保存所需的值

public class Range {
    public bool IsNull { get; set; }
    public string Value { get; set; }
}

public class C {
    public int Id { get; set; }
    public Range Range { get; set; }
}

这现在应该允许正确填充 Range

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2018-10-08
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多