【问题标题】:Unable to Deserialize Object using Newton Json无法使用 Newton Json 反序列化对象
【发布时间】:2015-09-04 19:05:44
【问题描述】:

我尝试使用以下代码,但输入参数为字符串时出现错误。

protected override object DeserializeCore(Type type, byte[] value)
{
     using (var ms = new MemoryStream(value))
     using (var sr = new StreamReader(ms, Encoding.UTF8))
     {
          var result = Newtonsoft.Json.JsonConvert.DeserializeObject(sr, type);
          return result;
     }
}

我将它传递为sr.ToString() 得到错误:

解析值时遇到意外字符:S. Path '', line 0, position 0.

【问题讨论】:

  • 你应该从 streamreader 获取字符串并检查其中的内容
  • 只得到编译时错误
  • 这段代码不是该异常的原因(这是运行时,而不是编译时),输入是。显示您的输入。这是无效的 JSON。
  • with ` var result = Newtonsoft.Json.JsonConvert.DeserializeObject(sr, type);` 我无法执行和编译,如何检查输入参数:(
  • 使用JsonConvert.DeserializeObject(sr.ReadToEnd(), type)

标签: c# json json.net getjson


【解决方案1】:

这不是更简单吗?

    protected override object DeserializeCore(Type type, byte[] value) {
        var str = System.Text.Encoding.UTF8.GetString(value);
        return JsonConvert.DeserializeObject(str, type);
    }

(我不明白你为什么要使用流。它与编码的某些问题有关吗?)

【讨论】:

    【解决方案2】:

    试试这个 -

    public class JsonObject
    {
        public object Value { get; set; }
        public string Type { get; set; }
    }
    
    var s = "{'Value':{'something':'test'},'Type':'JsonData'}";
    var o = DeserializeCore(typeof(JsonObject), Encoding.UTF8.GetBytes(s.ToCharArray()));
    

    应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-30
      • 2014-08-04
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多