字符串值的System.Runtime.Serialization.SerializationException

时间:2014-07-02 18:46:02

标签: c# wcf rest serialization

我有一个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>&lt;?xml version="1.0" encoding="Windows-1252"?&gt;&lt;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"&gt;&lt;Placemark id="7e5272b6-d1b4-4128-95bf-24ea9358681a"&gt;&lt;name&gt;CasualtyTool&lt;/name&gt;&lt;styleUrl&gt;#CasualtyTool&lt;/styleUrl&gt;&lt;Point&gt;&lt;altitudeMode&gt;clampToGround&lt;/altitudeMode&gt;&lt;coordinates&gt;-115.594205424414,41.295597016765,5000&lt;/coordinates&gt;&lt;/Point&gt;&lt;/Placemark&gt;&lt;/kml&gt;</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;

1 个答案:

答案 0 :(得分:0)

需要添加

<System.Runtime.Serialization.KnownType(GetType(PlacemarkType))> _

位于全方位课程的顶部。现在有效!