【发布时间】:2012-04-23 13:54:32
【问题描述】:
我有一个托管在 IIS 上的 WCF 服务。这是我的界面:
[ServiceContract]
[SilverlightFaultBehavior]
public interface IETC
{
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role = "XYZ")]
string GetStampXML();
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role = "XYZ")]
List<Stamp> GetStamps();
}
当我通过 Web 浏览器访问 WCF 服务时出现错误。错误如下:
Type 'System.Windows.Media.ImageSource' cannot be serialized. Consider marking it with the DataContractAttribute attribute.....
我的邮票类别是:
[DataContract]
public class Stamp
{
private string _Name;
private string _SmallIcon = "";
private string _MediumIcon = "";
private string _LargeIcon = "";
private BitmapImage _SmallImage;
private BitmapImage _MediumImage;
private BitmapImage _LargeImage;
[DataMember]
public string Name
{
get { return _Name; }
set { _Name = value; }
}
[DataMember]
public string SmallIcon
{
get { return _SmallIcon; }
set { _SmallIcon = value; }
}
[DataMember]
public string MediumIcon
{
get { return _MediumIcon; }
set { _MediumIcon = value; }
}
[DataMember]
public string LargeIcon
{
get { return _LargeIcon; }
set { _LargeIcon = value; }
}
[IgnoreDataMember]
public BitmapImage SmallImage
{
get { return _SmallImage; }
set { _SmallImage = value; }
}
[IgnoreDataMember]
public BitmapImage MediumImage
{
get { return _MediumImage; }
set { _MediumImage = value; }
}
[IgnoreDataMember]
public BitmapImage LargeImage
{
get { return _LargeImage; }
set { _LargeImage = value; }
}
}
这就像 IgnoreDataMember 没有被识别。我在没有 IgnoreDataMember 图形的情况下尝试了它,它只会序列化 DataMembers,但这也不起作用。任何想法为什么它似乎试图序列化 BitmapImage?
【问题讨论】:
-
您不应该需要 IgnoreDataMember 属性,当您在对象上指定 DataContract 时,只会在类上设置具有 DataMember 属性的属性。您应该检查您的服务接口,也许您使用的是 XmlSerializer 而不是 DataContract 序列化程序。
-
我试过没有明确添加 IgnoreDataMember 也没有运气。我怎么知道我正在使用 XmlSerializer?我认为 DataContract 属性会使其使用 DataCotnract 序列化程序。
-
我刚刚意识到您的错误消息说“考虑用 DataContractAttribute 标记它”,它应该来自 DataContract 序列化程序。所以这可能没问题。您发布的代码看起来也不错,因此错误可能在您的服务接口中使用的其他对象之一的其他地方。您应该知道,默认情况下,未使用 DataContract 标记的对象将序列化所有公共属性。您可以先尝试在 WCF 之外序列化测试对象。见msdn.microsoft.com/en-us/library/ms752244.aspx
标签: c# .net wcf serialization