Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML反序列化到不同的类?_C#_.net_Vb.net_Xml Serialization_Datacontractserializer - Fatal编程技术网

C# XML反序列化到不同的类?

C# XML反序列化到不同的类?,c#,.net,vb.net,xml-serialization,datacontractserializer,C#,.net,Vb.net,Xml Serialization,Datacontractserializer,我的目标是使用XML数据传输松散地连接两个应用程序 我可以轻松地以XML格式序列化和反序列化但是我可以从App1中的类进行序列化,并在App2中的不同类(使用与原始类相同的结构)中进行反序列化吗? C#或VB,没关系。VB中的结构示例: 附录1: 名称空间发送器 公共类数据输出 作为字符串的公共头 作为字符串的公共内容 末级 结束命名空间 附录2: 名称空间接收器 “Public Class DataIn”结构实际上与App1中的transmiter.DataOut匹配 作为字符串的公共头 作

我的目标是使用XML数据传输松散地连接两个应用程序

我可以轻松地以XML格式序列化和反序列化但是我可以从
App1
中的类进行序列化,并在
App2
中的不同类(使用与原始类相同的结构)中进行反序列化吗?

C#或VB,没关系。VB中的结构示例:

附录1:

名称空间发送器
公共类数据输出
作为字符串的公共头
作为字符串的公共内容
末级
结束命名空间
附录2:

名称空间接收器
“Public Class DataIn”结构实际上与App1中的transmiter.DataOut匹配
作为字符串的公共头
作为字符串的公共内容
末级
结束命名空间
App1
中,我可以将
Transmitter.DataOut
的实例序列化为XML,但如何将
App2
中生成的XML读入
Receiver.DataIn
的实例?是否需要在
App2
中实现
变送器.DataOut
?或者这个(我同意很多次都很有用的)功能可以解决吗?我不想因为共享相同的类名而受到限制


我对how-to(“它可行吗?”)感兴趣,而不一定对源代码感兴趣。如果需要的话,我可以发布我的源代码,但它是相当标准的,使用
DataContractSerializer
是的,您可以这样做。所有需要匹配的是数据契约,而不是底层的.Net类型。发件人:

对于成功将特定类型的数据发送到服务的客户端,或成功将数据发送到客户端的服务,发送的类型不一定存在于接收端。唯一的要求是这两种类型的数据契约是等效的。(如中所述,有时不需要严格等效。)

要使数据协定等效,它们必须具有相同的命名空间和名称。此外,一侧的每个数据成员必须在另一侧具有等效的数据成员

要使数据成员等效,它们必须具有相同的名称。此外,它们必须表示相同类型的数据;也就是说,它们的数据契约必须是等价的

基于契约的序列化程序的一个基本优点是它不要求底层类型相同。这允许实现独立于wire格式,也包括

您需要在两个系统中明确地将和设置为相同,例如:

Namespace Transmitter

    <DataContract(Name:= "Data", [Namespace]:="http://www.MyNameSpace.com")> _
    Public Class DataOut
        <DataMember>
        Public Header As String
        <DataMember>
        Public Content As String
    End Class

End Namespace
有关更多信息,请参阅


还要注意的是,
DataContractSerializer
,因此契约中的成员顺序必须匹配。

这是一个很好的解释。感谢您展示了如何理解和实现这一点。(昨天和今天,我花了很多不成功的时间学习和尝试。)
<Assembly:ContractNamespaceAttribute("http://www.MyNameSpace.com", ClrNamespace:="Transmitter")>