I have some problems with my service, about KnownType and inheritance. I read almost all similar questions, but I still have not found a solution. I will try to explain:
This is my interface:
[ServiceContract(Namespace = "MyNameSpace.Components.Web")]
public interface ITransactionsService
{
[OperationContract(Name = "Put")]
void Put(WebTransactionItem wtransactionItem);
}
this is my DataContract:
[DataContract(Namespace = "MyNameSpace.Components.Web")]
public class WebTransactionItem
{
[DataMember]
public TransactionItem items { get; set; }
[DataMember]
public TransactionItem[] TransactionItemList { get; set; }
}
TransactionItem is an abstract class provided in a (different) assembly.
The same assembly is used in the client project, so I have the same type that is referenced both on the client and on the server.
On the client side, after some operations (read the file, etc.), I have an array of objects that inherits from TransactionItem , says:
transItems[0] => TransactionHeaderObject
transItems[1] => TransactionTrailerObject
In Service Web.config, I added
<dataContractSerializer>
<declaredTypes>
<add type="Namespace.TransactionItem, Assemblyname, Version=1.4.1.2, Culture=neutral, PublicKeyToken=null">
<knownType type="Namespace.TransactionHeader, Assemblyname, Version=1.4.1.2, Culture=neutral, PublicKeyToken=null"/>
<knownType type="Namespace.TransactionTrailer, Assemblyname, Version=1.4.1.2, Culture=neutral, PublicKeyToken=null"/>
</add>
</declaredTypes>
</dataContractSerializer>
, KnownTypeAttribute [Datacontract].
( ) check ( ) , :
MyNameSpace.Components.Web.WebTransactionItem wtItem =
new MyNameSpace.Components.Web.WebTransactionItem(){
TransactionItemList = transItems}
. , ?
,
[DataMember]
public TransactionItem items { get; set; }
( , ) DataContract :
MyNameSpace.Components.Web: wtransactionItem. Innerexception:
"Assemblyname.TransactionHeader" "TransactionHeader: http://schemas.datacontract.org/2004/07/Assemblyname" .
, , , TransactionHeader ( TransactionItem) , (. Web.Config, knowntypeAttribute)!! , Reference.cs, , (
[DataMember]
public TransactionItem items { get; set; }
)
:
[KnownTypeAttribute(typeof(Assemblyname.TransactionHeader))]
[KnownTypeAttribute(typeof(Assemblyname.TransactionTrailer))]
. , , ( Reference.cs) , . TransactionItem, Web.config( KnownTypeAttribute.). ?