【问题标题】:Error converting string to type - Newtonsoft JSON deserialize将字符串转换为类型时出错 - Newtonsoft JSON 反序列化
【发布时间】:2020-08-10 00:32:43
【问题描述】:

我有一个 SQL 参数,如果插入成功与否,它会返回一条消息。

SqlParameter positivePar = new SqlParameter("@jsonGoodData", System.Data.SqlDbType.NVarChar, -1);
positivePar.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(positivePar);

我将该 SQL 参数转换为字符串

cmdPositive = cmd.Parameters["@jsonGoodData"].Value.ToString();

我像这样序列化它,因为稍后我想用 json 填充模型

string jsonPositive = Newtonsoft.Json.JsonConvert.SerializeObject(cmdPositive, Newtonsoft.Json.Formatting.Indented);

我正在尝试反序列化 json 并将其发送到模型,就像这样

List<TableNotificationModel> posJson = JsonConvert.DeserializeObject<List<TableNotificationModel>>(jsonPositive);

但我得到一个错误:

ArgumentException:无法从 System.String 转换或转换为 System.Collections.Generic.List`1[ModelLayer.Models.TableNotificationModel]。

这是模型

public class TableNotificationModel
    {
        [JsonProperty("OPERATOR_OBJECTID")]
        public int OPERATOR_OBJECTID { get; set; }

        [JsonProperty("SETTLEMENT_OBJECTID")]
        public string SETTLEMENT_CODE { get; set; }

        [JsonProperty("TECHNOLOGY_OBJECTID")]
        public string TECHNOLOGY_CODE { get; set; }

        [JsonProperty("UPLOAD_SPEED_CLASS_OBJECTID")]
        public string UPLOAD_SPEED_CLASS_CODE { get; set; }

        [JsonProperty("DOWNLOAD_SPEED_CLASS_OBJECTID")]
        public string DOWNLOAD_SPEED_CLASS_CODE { get; set; }

        [JsonProperty("DATA_CATEGORY_QOS_OBJECTID")]
        public string DATA_CATEGORY_QOS_CODE { get; set; }

        [JsonProperty("SHAPE")]
        public string SHAPE { get; set; }

        [JsonProperty("messageOut")]
        public string Message { get; set; }

    }

这是来自调试器的 cmdPositive 的值 和 cmdNegative 的值,因为只有 cmdNegative 有插入失败的错误消息。

我是否应该不将 SQL 参数作为字符串返回?我也尝试将 jsonPositive 更改为模型,但它会引发错误。对实习生有什么建议吗?

【问题讨论】:

  • 向我们展示您拥有的模型和产生错误的示例 JSON
  • 序列化的目的是将一个对象转换为一个字符串,当你已经有一个字符串时,它会将它序列化为一个转义的字符串。当您反序列化该转义字符串时,您将始终返回一个字符串(而不是对象列表)。一定要显示你试图反序列化的 json 应该是什么样子......另外,使用调试器查看你所拥有的值作为你正在序列化和反序列化的值。
  • cmdPositive 的值是多少(来自调试器)?还有jsonPositive我强烈怀疑你根本不需要jsonPositive - 可以使用cmdPositive
  • 我添加了有关模型和 JSON @zaitsman 的更多信息 :)
  • 我用你要求的信息更新了我的问题@mjwills :)

标签: c# json json.net type-conversion


【解决方案1】:

问题在于您的使用:

string jsonPositive = Newtonsoft.Json.JsonConvert.SerializeObject(cmdPositive, Newtonsoft.Json.Formatting.Indented);

此代码是不必要的,因为 cmdPositive 不是需要序列化为 JSON 的对象 - 它已经 JSON。

所以,改为:

string jsonPositive = cmdPositive;

就足够了(或完全删除jsonPositive 并改用cmdPositive)。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多