Как изменить поведение строковых объектов в вызовах веб-служб через Windows Communication Foundation? - PullRequest
0 голосов
/ 05 июня 2010

У меня есть сторонние 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, поле Addr2 является нулевым. Есть ли способ (или настройка), где все строковые поля, даже если они не инициализированы, будут возвращать пустую строку (если, конечно, значение не было установлено).

Ответы [ 2 ]

0 голосов
/ 05 июня 2010

У вас есть ссылка на ваш dll с классом клиента как на стороне клиента, так и на стороне сервера?

Я думаю, что в тот момент, когда вы создали клиент, вы добавили ссылку на службу добавления. Это создало класс на стороне клиента.

Затем вы создаете новый объект на стороне клиента, который не включает строки типа

private string addr1 = ""; 

Затем он устанавливается на ноль на стороне клиента и десериализуется на ноль на стороне сервера.

Если у вас есть контроль как на стороне клиента, так и на стороне сервера, вы можете ссылаться на DLL с помощью ссылок на объекты из обоих.

0 голосов
/ 05 июня 2010

Я не смог найти способ сериализации нулей в пустые строки, поэтому я изменил класс 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, и это решает проблему. (Если кто-нибудь знает другое решение, я бы с удовольствием его услышал.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...