【问题标题】:WCF DataContract Deserialization missing 3 String fields even with Order setWCF DataContract反序列化缺少3个字符串字段,即使有订单集
【发布时间】:2010-11-25 09:37:07
【问题描述】:

我有一项服务从托管在 WebApp 中的代理接收数据。 DataMembers 设置为 Order=*,我也尝试添加 isRequired=true。问题是在序列化和反序列化的 60 个信息字段中,相同的 3 个字符串字段始终缺失(空)。我已经运行调试,显示数据从客户端浏览器到代理服务完好无损(从 JSON 序列化)。然后代理服务将其发送到反序列化后缺少 3 个字段的 Windows 服务。

我尝试过以不同方式设置字段的顺序,但似乎没有任何效果。它总是相同的 3 个缺少字段的简单字符串,通常不超过 10-20 个字符。还值得一提的是,这些麻烦的 DataMember 已正确填充到程序的所有其他区域。

代理服务代码如下

 public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo)
    {
        MyService.MyServiceClient proxy = new MyService.MyServiceClient("WSHttpBinding_IMyService");
        proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
        TransactionResult result = proxy.Update(obj, ItemOne, ItemTwo);
        proxy.Close();
        return result;
    }

Windows 服务代码是

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo)
{obj is missing same 3 values at this point...}

对象的数据成员之一的示例

[DataMember(Order = 56)]
    public String ItemTwo
    {
        get
        {
            ...
        }
        set
        {
            ...
        }
    }

【问题讨论】:

    标签: .net xml wcf serialization deserialization


    【解决方案1】:

    想法:

    • 确保未计算这些字段(因此在您的代码中重置或更改,具体取决于反序列化顺序)
    • 确保您没有定义 DefaultValue 属性,因为序列化使用它来优化带宽
    • 确保您没有声明一些会破坏这些字段的自定义行为
    • 尝试另一个 WCF 绑定(HTTP、NETTCP、...)
    • 挂钩 OnDeserialized、OnDeserializing 事件并检查数据是否存在

    【讨论】:

      【解决方案2】:

      要检查的一件事可能是签名中的附加参数与您的实体上的属性具有相同的名称。

      为什么不重命名签名参数(记得重新生成你的客户端服务引用/代理)

      public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo)
      

      到

      public TransactionResult Update(MyObj obj, String NewItemOne, String NewItemTwo)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多