如何通过Windows Communication Foundation更改Web服务调用中字符串对象的行为?

时间:2010-06-04 20:01:21

标签: wcf serialization

我有第三方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 Communication Foundation的Web服务调用它,Addr2字段为空。有没有一种方法(或设置),即使未初始化,所有字符串字段都将返回一个空字符串(当然,除非设置了一个值)。

2 个答案:

答案 0 :(得分:0)

我找不到如何将空值序列化为空字符串,所以我更改了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,并且它可以解决问题。 (如果有人知道不同的解决方案,我很乐意听到。)

答案 1 :(得分:0)

您是否在客户端和服务器端都有客户类的dll参考?

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

然后在客户端执行一个不包含

类型行的新对象
private string addr1 = ""; 

然后在客户端设置为null,并在服务器端反序列化为null。

如果您可以控制客户端和服务器端,则可以使用两者中的对象引用来引用dll。