【问题标题】:Inheriting Existing .Net Class Serialization Error继承现有的 .Net 类序列化错误
【发布时间】:2012-02-15 07:31:13
【问题描述】:

我正在继承和修改 System.Net.MailMessage 类以用于 Web 服务。出于其他原因,我需要将其命名为 MailMessage。当我在下面的代码中使用它时,我得到下面的错误。

“类型 'System.Net.Mail.MailMessage' 和 'TestWebService.MailMessage' 都使用来自命名空间 'http://tempuri.org/' 的 XML 类型名称 'MailMessage'。使用 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()
        {

        }
    }
}

【问题讨论】:

  • 尝试使用 [XmlType(Namespace="test")] 来分配您的子类。
  • 顺便说一句,您是否知道 ASMX Web 服务是一项遗留技术,不应该用于新开发?

标签: c# asp.net xml web-services asmx


【解决方案1】:

您必须添加XmlTypeAttribute 来更改名称或命名空间,使其对序列化具有唯一性

using System.Xml.Serialization

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

但是,System.Net.Mail.MailMessage 本身不可序列化,因此从它派生的类将不可序列化。

【讨论】:

猜你喜欢
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2010-12-15
  • 1970-01-01
  • 2012-10-10
  • 2012-11-16
相关资源
最近更新 更多