Wcf 如何通过Windows通信基金会更改Web服务调用中的字符串对象的行为?

Wcf 如何通过Windows通信基金会更改Web服务调用中的字符串对象的行为?,wcf,serialization,Wcf,Serialization,我有第三方api,它要求字符串值作为空字符串提交。 在asp.net页面上,我可以使用以下代码(此处缩写),它运行良好: public class Customer { private string addr1 = ""; public string Addr1 { get {return addr1;} set {addr1 = value;} } private string addr2 = ""; publi

我有第三方api,它要求字符串值作为空字符串提交。 在asp.net页面上,我可以使用以下代码(此处缩写),它运行良好:

public class Customer
{
    private string addr1 = "";
    public string Addr1
    {
        get {return addr1;}
        set {addr1 = value;}
    }

    private string addr2 = "";
    public string Addr2
    {
        get {return addr2;}
        set {addr2 = value;}
    }

    private string city = "";
    public string City
    {
        get {return city;}
        set {city = value;}

    }
}

Customer cust = new Customer();
cust.Addr1 = "1 Main St.";
cust.City = "Hartford";
int custno = CustomerController.InsertCustomer(cust);
未初始化的Addr2字段在插入时仍然是空字符串


但是,使用相同的代码,但通过基于Windows通信基础的Web服务调用它,ADDR2字段为NULL。是否有一种方法(或设置)使所有字符串字段(即使未初始化)返回空字符串(当然,除非设置了值)

我找不到如何将null序列化为空字符串,因此我更改了Customer类,如下所示:

public class Customer 
{ 
private string addr1 = ""; 
public string Addr1 
{ 
    get {return addr1;} 
    set {addr1 = value ?? string.Empty; } 
} 

private string addr2 = ""; 
public string Addr2 
{ 
    get {return addr2;} 
    set {addr2 = value ?? string.Empty; } 
} 

private string city = ""; 
public string City 
{ 
    get {return city;} 
    set {city = value ?? string.Empty; } 

} 

这保证了所有字符串属性都设置为string.Empty,从而解决了这个问题。(如果有人知道另一种解决方案,我很想听听。)

您是否在客户端和服务器端都有对带有customer类的dll的引用

我认为正在发生的是,在创建客户机时,您已经完成了添加服务引用。这已经生成了一个客户端类

然后在客户端创建一个不包含该类型行的新对象

private string addr1 = ""; 
然后在客户端将其设置为null,在服务器端将其反序列化为null


如果您可以同时控制客户端和服务器端,则可以使用来自这两个端的对象引用来引用dll。

我无法使用纯WCF(服务和客户端)重现此问题。服务的接收端是什么样的环境?也许这是一个互操作问题?insert最终会进入一个progressapi,然后进入progressdatabase,但这种情况发生在这之前。我只是复制了它,以确保我正确描述了行为,我做到了。可能是我使用的是没有任何DataContract装饰或DataMembers的普通C#类吗?在我看来这是一个序列化问题。。。