我有一个WCF REST服务,它返回一个包含名为' GeoDataKML'的字符串字段的业务对象。此字段只是一个字符串值,但它内部有KML字符串(已编码,因此它不会干扰此业务对象的XML序列化)。问题是,当该字段中包含数据时,我在尝试下载此数据时出现WCF错误:
System.Runtime.Serialization.SerializationException 考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
我尝试发送的数据如下。如果我删除GeoDataKML值,那么服务工作正常,没有错误。应用KnownType似乎没有任何好处。关于如何让WCF REST不尝试序列化此字符串对象中的数据的任何想法?
<?xml version="1.0" encoding="Windows-1252"?><ArrayOfFullLogEntry xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FullLogEntry>
<IsSelected>false</IsSelected>
<StaticGUID>be547685-2bdd-4abf-84a4-d20c13c5fe58</StaticGUID>
<GeoDataKML><?xml version="1.0" encoding="Windows-1252"?><kml xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/kml/2.2"><Placemark id="7e5272b6-d1b4-4128-95bf-24ea9358681a"><name>CasualtyTool</name><styleUrl>#CasualtyTool</styleUrl><Point><altitudeMode>clampToGround</altitudeMode><coordinates>-115.594205424414,41.295597016765,5000</coordinates></Point></Placemark></kml></GeoDataKML>
<SymbolGUID>00000000-0000-0000-0000-000000000000</SymbolGUID>
<GeoDataTypeGUID>00000000-0000-0000-0000-000000000000</GeoDataTypeGUID>....
FullLogEntry只有以下值:
public class FullLogEntry
{
public Guid StaticGUID {get;set;}
public string GeoDataKML {get;set;}
public Guid GeoDataTypeGUID{get;set;}
public Guid SymbolGUID{get;set;}
public bool IsSelected {get;set;}
}
服务合同只是:
[ServiceContract(Namespace = WCFServiceBaseClass.ServiceNamespace)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, Namespace = WCFServiceBaseClass.ServiceNamespace)]
命名空间是&#39; http://test.org&#39;
答案 0 :(得分:0)
需要添加
<System.Runtime.Serialization.KnownType(GetType(PlacemarkType))> _
位于全方位课程的顶部。现在有效!