问题标签 [datacontractserializer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - 使用动态代理和 wcf 序列化问题的通用 IPropertyChangedNotifier
我已经使用城堡动态代理实现了一个通用的 IPropertyChangedNotifier。在这里,我拦截了 Proxy 对象中的 setter 调用,这样我就不必在我的域对象的 setter 中引发 PropertyChanged 事件。
目的是使用这些代理对象将其 UI 绑定到 silevrlight 应用程序中。
问题是代理对象的序列化在 WCF 服务调用中失败,这是由于代理对象上没有 [DataContract]。为了解决这个问题,我必须在我的拦截器中保留一个实例的副本并将这个对象发送给序列化。IPropertyChangedNotifier
这导致了难以调试或理解的复杂代码。有没有一种简单的方法来解决 WCF 中的序列化问题,告诉序列化程序在服务调用中发送代理时使用基类(实例)的 [DataContract] 属性。
wcf - WCF - 以编程方式测量近似消息大小
给定一个类:
WireShark 显示,当通过 WCF TCP 绑定发送时,消息的编码是二进制的(仅限可打印字符,但你明白了):
ChangedFielda.I..a.V....e:double..e http://www.w3.org/2001/XMLSchema.s.....a.
但是如果我像这样序列化这种类型的实例......
...然后流包含类似于以下内容的 SOAP XML:
所以我的问题是如何控制DataContractSerializer
在我自己的代码中生成这种二进制表示?
作为旁白:
如您所见,消息因object
属性必须对其类型进行编码(因此是 URI)而变得臃肿。我将对其进行更改以使用自定义二进制编码,因为在我的场景中,字段 ID 确定类型(在本例中为double
)。
c# - DataContractSerializer 不调用我的构造函数?
我刚刚意识到一些疯狂的事情,我认为这是完全不可能的:反序列化对象时,DataContractSerializer 不会调用构造函数!
以这门课为例:
当我反序列化该类的对象时,没有命中断点。我完全不知道这怎么可能,因为它是这个对象的唯一构造函数!
我假设编译器可能因为该DataContract
属性而生成了一个额外的构造函数,但我无法通过反射找到它......
所以,我想知道的是:如何在不调用构造函数的情况下创建我的类的实例?
注意:我知道我可以OnDeserializing
在反序列化开始时使用该属性来初始化我的对象,这不是我的问题的主题。
wcf - 为什么 WCF 将请求/响应类型包装在另一个 XML 元素中,以及如何防止这种情况发生?
我有一个简单的回显服务,我在其中定义了一个操作方法和一对请求/响应类型:
数据类型:
在 EchoRequest 实例上调用 Message.CreateMessage() 会产生:
...这正是我想要的。但是,服务似乎希望消息正文进一步包装在另一个 XML 元素中,如下所示:
更新: 感谢 Mark 的回复,我在请求/响应类型上探索了 MessageContract 而不是 DataContract。这似乎更接近我想要的,但现在它走得太远了,并且不期望外部类型元素“EchoRequest”。
这令人困惑,因为 Message.CreateMessage 似乎以某种方式始终生成正确的 XML,因此它显然使用了一些默认序列化,我想将服务配置为接受。我只是误解了 Message.CreateMessage 的工作原理吗?
wcf - WCF DataContractSerializer 不获取合同属性......为什么不呢?
我有以下类型,我在 WCF 中用作消息协定:
当我使用svcutil.exe生成此类型的代理时,我得到了一个客户端,该客户端能够与托管它的服务进行通信,并且元素上的 XML 命名空间根据消息合同属性是正确的。
当我Message.CreateMessage(...)
在它的实例上使用时,命名空间恢复为默认值(http://schemas.datacontract.org/2004/07/..)。当我使用 的实例时DataContractSerializer
,会发生同样的事情。我尝试将命名空间传递给DataContractSerializer
构造函数,并且只有包装器包含在命名空间中:
此时,“数据”是:
为什么DataContractSerializer
出现忽略MessageContract
属性?svcutil如何获得这项工作?
caching - 缓存 DataContractSerializer 实例是个好主意吗?
我正在编写一个 Windows 服务应用程序,该应用程序需要在执行期间反复序列化和反序列化 XML 文档。因为我需要序列化和反序列化在编译期间未知的泛型类型(我不知道先验需要序列化/反序列化多少类型),所以我想知道保留缓存是否是个好主意我实例化的 DataContractSerializer 对象用于序列化和反序列化对象。
我问这个问题是因为我知道缓存 XmlSerializer 类实例是个好主意,因为它们在内存中创建了一个动态程序集,并且在内存中动态创建的程序集不会被垃圾收集。
我读到 DataContractSerializer 依赖于轻量级代码生成,但我不熟悉它的细节。这就是我问这个问题的原因,我需要了解如果我根据需要实例化 DataContractSerializer 实例,它会导致我像 XmlSerializer 那样导致内存泄漏?
我选择使用 DataContractSerializer 而不是 XmlSerializer 来序列化内部属性。
.net - DataContractSerializer、KnownType 和继承
我读过很多关于已知类型的文章,我相信我的例子应该有效。但事实并非如此。我在反序列化时遇到以下异常,但不明白为什么:
第 1 行位置 2 出错。从命名空间“ http://schemas.datacontract.org/2004/07/ConsoleApplication2 ”中期待元素“A”。遇到名称为“C”的“元素”,命名空间“ http://schemas ” .datacontract.org/2004/07/ConsoleApplication2 '。
我错过了什么?
c# - 如何使 DataContractJsonSerializer 将对象序列化为字符串?
我在 C# 中有一个包含 guid 的结构。我正在使用 DataContractJsonSerializer 来序列化包含该类实例的对象。当我直接使用 guid 时,它被序列化为纯字符串,但现在它被序列化为名称/值对。这是一个演示问题的 NUnit 测试和支持代码:
测试运行器输出:
如何将我的结构序列化为纯字符串并使我的测试通过?
c# - DataContractSerializer 输出带有附加到所有元素且无序的“字段”的 XML
我是创建 WCF REST 服务的新手——所以如果我在这里做错了,请让我惊叹。
我有一个使用 WCF 开发的基于 REST 的服务,定义了以下 DataContract:
在客户端应用程序上,我正在尝试使用 HttpWebRequest 对象发布到服务(使用此数据协定),输出由 a 生成DataContractSerializer(typeof(MessagingWS.Email))
(因为在使用“添加服务引用”添加 WCF 服务后,我可以使用 Email 类...' 作为客户端应用程序上的 MessagingWS)。无论如何,这会产生以下输出,当我尝试 POST 时,该输出会从服务返回 400 - Bad Request:
所以我最终得到了所有附加“字段”的元素,它们不是我在 DataContract 中指定的顺序(它们采用默认顺序)。有人可以告诉我这里发生了什么,如果我试图完成一些不可能的事情吗?
我确实注意到,当我将 DataContract 类从服务器复制到客户端(并将其包含在不同的命名空间 - Messaging2 下)时,当我使用DataContractSerializer(typeof(Messaging2.Email))
. 我真的应该这样做吗?它似乎有效,但我认为我应该能够在运行“添加服务引用......”后使用我在客户端获得的类。
非常感谢任何帮助 - 谢谢!
c# - DataContractSerializer 不序列化继承 ISerializable 的类的成员
我有这堂课:
由于它继承自 HashSet,它必须实现 ISerializable,因此受保护的构造函数和 GetObjectData 方法。以前我使用 BinaryFormatter 成功地序列化和反序列化这个类。
因为我希望能够检查由序列化程序生成的输出,所以我想切换到 DataContractSerializer。
我写了这个测试:
测试失败,因为 Name 属性为空!(尽管整数被(反)序列化正确)发生了什么?
编辑:它与名称支持字段是私有的无关。将其公开具有相同的结果。