【问题标题】:How to deserialize NetDataContractSerializer data in .NET Core?如何反序列化 .NET Core 中的 NetDataContractSerializer 数据?
【发布时间】:2019-08-30 04:41:41
【问题描述】:

我有一个现有的 .NET Framework WCF 服务,它返回使用 NetDataContractSerializer 序列化的数据,这由各种 .NET Framework 客户端使用。

我现在想编写一个新的客户端应用程序,它也将使用它,但我的新客户端将使用 .NET Core 编写。

适用于 .NET Core 的 Windows 兼容包提供了使用 WCF 服务所需的大部分 API,但是这个关键的 NetDataContractSerializer 类似乎丢失了。

有没有办法将这些数据反序列化到 .NET Core 应用程序中? 这些类型本身位于共享的 .NET Framework 程序集中,该程序集恰好与 .NET Standard 兼容,因此可以毫无问题地加载到 .NET Core 应用程序中。

【问题讨论】:

    标签: c# wcf .net-core


    【解决方案1】:

    这似乎是不可能的,因此我在 .NET Core github 上打开了这个问题来跟踪这个特性:

    https://github.com/dotnet/corefx/issues/33120

    【讨论】:

      【解决方案2】:

      虽然 NetDataContractSerializer 在 .Net Core 中不可用,但您可以试试这个端口 NetDataContractSerializer library。这几乎是 .Net Framework System.Runtime.Serialization 库的完整 .Net Core 端口。

      【讨论】:

      • 如果你发布了你制作的东西,你应该提到你做了它。
      【解决方案3】:

      如您所知,DotnetCore 不支持 NetdataContractSerializer 类。 https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.netdatacontractserializer?view=netframework-4.7.2
      dotnetcore支持DataContractSerializer,我们可以使用ReadObject方法读取Stream并返回反序列化的对象。

      Product p1 = (Product)serializer1.ReadObject(ms);
      

      https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datacontractserializer?view=netcore-2.1
      对于这些跨平台项目,我建议您使用仅依赖于 .Net 标准的 NewtonSoft.Json 库。
      https://www.nuget.org/packages/Newtonsoft.Json/

      【讨论】:

      • 你是说 DataContractSerializer 可以正确反序列化被 NetDataContractSerializer 序列化的数据?
      • 是的,我做了一个测试,但我不建议你这样做。
      • 这对我不起作用,我在尝试使用 DataContractSerializer 对其进行反序列化时得到Element ClassName from namespace cannot have child contents to be deserialized as an object. Please use XmlNode[] to deserialize this pattern of XML
      • 是的,你是对的。鉴于平台与序列化程序不兼容,我建议您使用 Newtonsoft.JSON。
      • 不幸的是,这是试图调用现有的 WCF 服务,改变它序列化数据的方式并不是一个真正的选择。可能不得不放弃 .NET Core 并返回到 Framework 来解决这个问题......
      猜你喜欢
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2020-03-13
      • 1970-01-01
      相关资源
      最近更新 更多