Наследование существующей ошибки сериализации .Net Class - PullRequest
4 голосов
/ 20 января 2012

Я наследую и изменяю класс System.Net.MailMessage для использования в веб-сервисе. Мне нужно оставить его с именем MailMessage по другим причинам. Когда я использую это в коде ниже, я получаю ошибку ниже.

"Типы" System.Net.Mail.MailMessage "и" TestWebService.MailMessage "оба используют имя типа XML," MailMessage ", из пространства имен" http://tempuri.org/'. Использование атрибутов XML для указания уникального имени XML и / или пространство имен для типа. "

Полагаю, мне нужно добавить атрибуты XMLRoot и Type, но я не могу найти правильную комбинацию. Что мне нужно сделать, чтобы устранить эту ошибку?

namespace TestWebService
{

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string Test(MailMessage emailMessage) 
        {
            return "It Worked!";
        }
    }
}

namespace TestWebService 
{
    public class MailMessage : System.Net.Mail.MailMessage
    {

        public MailMessage() : base()
        {

        }
    }
}

1 Ответ

8 голосов
/ 20 января 2012

Вы должны добавить XmlTypeAttribute, чтобы изменить имя или пространство имен, чтобы сделать его уникальным для сериализации

using System.Xml.Serialization

[XmlType(Namespace = "http://tempuri.org/", TypeName = "SomethingOtherThanMailMessage")]
public class MailMessage : System.Net.Mail.MailMessage
{
}

Однако сам System.Net.Mail.MailMessage не сериализуем, поэтому ваш класс, производный от него, выиграл 'быть сериализуемым.

...