[DataContract]
public class AssetData
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<AssetData> ChildAssets { get; set; }
[DataMember]
public int Priority { get; set; }
[DataMember]
public AssetData ParentNode { get; set; }
}
[ServiceKnownType(typeof(Dictionary<string, AssetData>))]
public interface IRtxEquipmentConfiguration
{
[OperationContract]
object GetData(string sKey, string sRequest);
}
与反序列化信息列表上述OperationContract的"GetData"
服务器返回AssetData的字典。 我已经将AssetData标记为DataContract,并将其所有字段标记为DataMembers。 在客户端,我得到了wcf错误“套接字连接已被处置。\ r \ n对象名称:'System.ServiceModel.Channels.SocketConnection'。”。我怀疑这个错误是因为字段ChildAssets。 当我单独禁用此字段时(通过删除DataMember标签),然后在客户端,我能够获取所有Dictionary元素,并在每个元素中使用除ChildAssets之外的所有字段。 我能够看到剩余的字段名称,父节点和优先级。WCF无法在Dictionary元件
任何线索为什么WCF无法序列化字典元素中的列表?
你在使用什么客户端?也许客户端上的Web服务引用想要一个ObservableCollection而不是一个列表 – Rumplin 2012-07-17 08:47:52
Rumplin,现在客户端和服务器都在同一个进程中。我正在使用.NET 4.0框架和C#语言。它是一个自我托管的服务,在客户端(在我的情况下,在同一个进程中,这只是另一个DLL)我将对象强制转换为Dictionary。一切都很好,除了DataMember ChildAssets –
Imran
2012-07-17 08:50:50
只是为了测试,将列表更改为ObservableCollection –
Rumplin
2012-07-17 08:59:58