【问题标题】:how to serialize DBParameters in c#如何在c#中序列化DBParameters
【发布时间】:2013-10-09 08:29:37
【问题描述】:

我正在尝试序列化我在课堂上定义的 DBParameters。

当它尝试转换为序列化时,会出现以下错误。

“使用 XmlInclude 或 SoapInclude 属性来指定静态未知的类型。”

这是我的代码

[Serializable]
public class DemoClass{
public List<DbParameter> Parameters { get; set; }
}

谁能帮我解决这个问题?如何序列化参数属性?

谢谢

【问题讨论】:

标签: c# xml-serialization


【解决方案1】:

DbParameter 不是序列化的好选择。

首先,它是一个抽象基类,因此对于大多数序列化程序(包括XmlSerializer),您需要提前正式宣传预期的具体子类 - 以及那些不'不需要 这通常会需要[Serializable] - 它不是。

第二个(也许更重要的)问题是它是实现(它从根本上与 ADO.NET 相关联),其中序列化应该是关于 数据

我强烈建议您为序列化目的编写自己的 DTO 模型,该模型侧重于您需要了解的内容,例如 NameValue 是最明显的事情,但 @ 987654326@ 和 Direction 也很重要 - 并序列化您自己的模型。这将解决这两个问题。

还有第三个问题,我首先会质疑序列化参数的目的。如果这是出于 RPC 目的,我强烈建议您不要这样做,因为它听起来就像您正在打开任意 sql 漏洞。对于 RPC,只需定义和传递参数/参数作为服务边界的一部分。

【讨论】:

  • 我不是 OP,但我遇到了这个答案,因为我试图使用 JsonSerializer 来一般地序列化 DbCommand 及其参数以记录错误。 DbConnection 和 DbCommand 本身可以很好地序列化,但是 DbParameterCollection 只会吐出每个项目的 ParameterName,除非按照您的建议,您使用显式属性提取来处理它。即使将 ParameterCollection 中的每个项目强制转换为 DbParameter(甚至是 SqlParameter),也只会在序列化输出中产生名称。参数。
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多