【问题标题】:Wcf send object from Compact Framewok to Desktop WCF Service properties does not deserializeWcf 将对象从 Compact Framewok 发送到桌面 WCF 服务属性不会反序列化
【发布时间】:2011-05-22 21:44:50
【问题描述】:

我有一个在台式电脑上运行的 wcf 服务。该服务有两种方法

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
公共接口 IMainModuleService
{
OrderDTO GetOrderById(int orderId);
void ProcessOrder(OrderDTO 订单);
}

我使用了 Necfsvcutil,它生成了一个代理和 poco。

当我使用紧凑框架中的 GetOrderById(int id) 时,一切正常,但是当 我使用 ProcessOrder(OrderDTO order) 将订单发送回服务,尽管 OrderDTO 具有带值的所有属性,但当它到达桌面服务方法时,它不会反序列化 OrderDTO 的所有属性。发送前的 OrderDTO.Id==2050,它以 OrderDTO.Id==0 的形式到达。我注意到每个 int 属性值都为零。

谢谢!

【问题讨论】:

    标签: wcf compact-framework


    【解决方案1】:

    我终于找到了问题,netcfsvcutil为生成的dto中的每个属性生成了一个Name为PropertyName+Specified的属性。例如。

    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=20)]
    public System.Nullable<int> SalesPersonId
    {
        get
        {
            return this.salesPersonIdField;
        }
        set
        {
            this.salesPersonIdField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool SalesPersonIdSpecified
    {
        get
        {
            return this.salesPersonIdFieldSpecified;
        }
        set
        {
            this.salesPersonIdFieldSpecified = value;
        }
    }
    

    这些属性不是 netcfsvcutil 用来生成 dto 的实体的一部分。 如果 propertyNameSpecified 不等于 true,则属性值未序列化,因此我更改了属性并在 Setter 中添加了一行,用于检查属性是否有值,如果有,则将 propertyNameSpecified 的值设置为 true,例如下面:

    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=20)]
    public System.Nullable SalesPersonId
    {
    得到
    {
    返回 this.salesPersonIdField;
    }
    设置
    {
    this.salesPersonIdField = value;
    this.SalesPersonIdSpecified = (value != null);
    }
    }

    【讨论】:

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