【发布时间】: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