2011-09-14 6 views
0

다음 개체가 있는데 int, string 및 custom 개체가 아닌 standart 개체를 지정할 때 잘 작동합니다.WCF의 사용자 지정 개체

[DataContract(Namespace = "")] 
public class StatusLog<TItem> 
{ 
    /// <summary> 
    /// Gets or sets the key. 
    /// </summary> 
    /// <value> 
    /// The key. 
    /// </value> 
    [DataMember] 
    public Guid Id { get; set; } 

    /// <summary> 
    /// Gets or sets the action status. 
    /// </summary> 
    /// <value> 
    /// The action status. 
    /// </value> 
    [DataMember] 
    public ActionStatus ActionStatus { get; set; } 

    /// <summary> 
    /// Gets or sets the object. 
    /// </summary> 
    /// <value> 
    /// The object. 
    /// </value> 
    [DataMember] 
    public TItem Object { get; set; } 

    /// <summary> 
    /// Gets or sets the message. 
    /// </summary> 
    /// <value> 
    /// The message. 
    /// </value> 
    [DataMember] 
    public string Message { get; set; } 
} 

이 작동 : 새로운 StatusLog는 {식 Guid.NewGuid(), ActionStatus = ActionStatus.Deleted 개체 = Convert.ToInt32 (ID), 메시지 = "노드가 성공적으로 삭제"} 반환 ;

작동하지 않습니다. 새로운 StatusLog {Id = Guid.NewGuid(), ActionStatus = ActionStatus.Created, Object = MyCustomObject};

+1

MyCustomObject의 유형도 직렬화 속성 ('[DataContract]','[DataMember]')으로 표시되어 있습니까? –

+0

예. 그들은 둘 다 있습니다. –

답변

3

KnownType 속성을 살펴보십시오.

+2

+1. 'TItem'이 다시 직렬화 할 필요가있는 것에 대해서는'[KnownType (typeof (...))] 속성을 추가해야합니다. – CodingWithSpike

+0

문제가 발견되었습니다. 지정하지 않았습니다. Content-Type : text/xml –

1

언급 한 flosk8처럼 DataContractSerializer는 KnownType 특성으로 장식되어 있지 않으면 DataContract를 deserialize 할 때 고려해야 할 형식을 알 수 없습니다. 당신 DataContract에 다음 속성을 추가

http://msdn.microsoft.com/en-us/library/ms730167.aspx

시도 :

[DataContract(Namespace = "")] 
[KnownType(typeof(MyCustomObject))] 
public class StatusLog<TItem> 
{ 
    // ... snip ... 
} 

당신은 StatusLog.Object 속성에 직렬화 복원해야 할 수 있습니다 각 유형에 대해이 속성을 추가해야합니다. 또한 이러한 각 유형은 직렬화 할 수 있어야합니다.

관련 문제