2011-08-30 6 views
4

저는 WCF 경계를 넘을 수있는 모든 유형을 직렬화 및 비 직렬화하여 모든 속성이 다른 측면에 적용될 것이라는 것을 증명할 수있는 단위 테스트를 작성하고 있습니다.WCF Serialization UnitTests 및이 XmlWriter는 base64로 인코딩 된 데이터를 지원하지 않습니다. 어떤 글쓴이를 사용해야합니까?

바이트 [] 속성으로 약간의 걸림돌을 맞았습니다. 내가 테스트를 통해이 객체를 실행하면

[DataContract(IsReference=true)] 
public class BinaryDataObject 
{ 
    [DataMember] 
    public byte[] Data { get; set; } 
} 

, 나는 System.NotSupportedException를 얻을 : This XmlWriter does not support base64 encoded data. WCF는 아마 XDocument 인스턴스를 사용하지 않고 System.Xml.XmlWriter 인스턴스를 사용하지 않을 수 있습니다 -

public static XDocument Serialize(object source) 
{ 
    XDocument target = new XDocument(); 
    using (System.Xml.XmlWriter writer = target.CreateWriter()) 
    { 
    DataContractSerializer s = new DataContractSerializer(source.GetType()); 
    s.WriteObject(writer, source); 
    } 
    return target; 
} 

내 직렬화 방법은 결함이되어야한다는 것을 나에게 발생

여기 내 직렬화 방법입니다.

WCF는 기본적으로 어떤 작성자를 사용합니까? 내 테스트에서 그 유형의 인스턴스를 사용하고 싶습니다.

답변

5

리플렉터 닌자 스킬을 사용하면 서브 유형이 XmlDictionaryWriter 인 것 같습니다.

public static XDocument Serialize(object source) 
    { 
     XDocument target; 
     using (System.IO.MemoryStream stream = new System.IO.MemoryStream()) 
     using (System.Xml.XmlWriter writer = XmlDictionaryWriter.CreateTextWriter(stream)) 
     { 
      DataContractSerializer s = new DataContractSerializer(source.GetType()); 
      s.WriteObject(writer, source); 
      writer.Flush(); 
      stream.Position = 0; 
      target = XDocument.Load(stream); 
     } 
     return target; 
    } 

및 모든 수선해야한다 : 같은 당신의 Serialize 방법을 다시 작성합니다.

+0

정확히 내가 필요한 것, 감사합니다! –

관련 문제