我得到這個錯誤,當我嘗試調用WCF服務:WCF客戶端異常:錯誤嘗試反序列化參數
格式化拋出一個異常,而試圖反序列化 消息:時出錯同時試圖反序列化參數 http://tempuri.org/:ResultValue。 InnerException消息是'Error in line 1 position 1741.元素 'htp://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType' 包含來自映射到名稱的類型的數據 'htp ://schemas.datacontract.org/2004/07/DataAccess:人」。 反序列化程序不知道映射到此名稱的任何類型。 考慮使用DataContractResolver或將對應於 'Person'的類型添加到已知類型列表中 - 例如,使用 KnownTypeAttribute屬性或將其添加到傳遞給DataContractSerializer的已知類型列表 。
我有以下定義一個接口項目:
public interface IPerson
{
string Name { get; set; }
}
public interface IPersonExtended : IPerson
{
// If I remove the List of IPerson property, it works fine
List<IPerson> Contacts { get; set; }
}
我有一個實現該接口數據訪問項目:
public class Person : IPerson
{
public string Name { get; set; }
}
public class PersonExtended : IPersonExtended
{
public string Name { get; set; }
private List<IPerson> mContacts = new List<IPerson>();
// If I remove the List of IPerson property, it works fine
public List<IPerson> Contacts
{
get { return mContacts; }
set { mContacts = value; }
}
}
我的服務合同是這樣的:
[ServiceContract]
[ServiceKnownType(typeof(Person))]
[ServiceKnownType(typeof(PersonExtended))]
public interface IMyService
{
[OperationContract]
ServiceCallResult<GetPeopleResponse> GetPeople(GetPeopleRequest request);
}
我的服務KS這樣的:
public class MyService : IMyService
{
public ServiceCallResult<GetPeopleResponse> GetPeople(GetPeopleRequest request)
{
GetPeopleResponse response = new GetPeopleResponse();
// Get Some people that have contacts
response.People = GetPeopleFromSomewhere();
ServiceCallResult<GetPeopleResponse> result =
new ServiceCallResponse<GetPeopleResponse> { ResultValue = response };
return result;
}
}
我的回答對象的樣子:
[DataContract]
[KnownType(typeof(PersonExtended))]
[KnownType(typeof(Person))]
[KnownType(List<Person>))]
[KnownType(List<PersonExtended))]
public class GetPeopleResponse
{
[DataMember]
public List<PersonExtended> People { get; set; }
}
響應對象只是包裹在一個包含狀態信息的MessageContract
對象等
編輯 如果我通過整個工作流刪除了聯繫人(列表)屬性,它工作正常。我想知道它是否與嘗試使用具有列表的屬性而不是具體對象的界面相關,但我不確定如何在不添加循環引用的情況下繞過項目結構。
我不這麼認爲。我已經更新了我的問題。這代表了我專有對象的簡化版本。 'ServiceCallResult'對象只是一個包含狀態等信息的包裝器。 –
你在服務類的最後有一個return語句,它告訴我你不知道你在做什麼......服務類也不實現接口聲明的函數。 – furier
其實,並不是我不知道我在做什麼。這是一個簡單的剪切/粘貼問題。我明顯地忽略了函數def,這需要在那裏才能滿足界面。 –