2010-03-17 2 views
1

나는 웹 서비스에 액세스하기위한 클래스를 생성하기 위해 svcutil을 사용했습니다. 나는 그것들을 직렬화 할 필요가있다. 클래스는 매우 간단합니다. 여기 보이는 모양입니다.svcutil synthetized 클래스의 serialization 문제

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] 
[System.Runtime.Serialization.DataContractAttribute(Name="cosemAttributeDescriptor", Namespace="http://www.energiened.nl/Content/Publications/dsmr/P32")] 
public partial class cosemAttributeDescriptor : object, System.Runtime.Serialization.IExtensibleDataObject 
{ 

    private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

    private ushort ClassIdField; 

    private string InstanceIdField; 

    private sbyte AttributeIdField; 

    public System.Runtime.Serialization.ExtensionDataObject ExtensionData 
    { 
     get 
     { 
      return this.extensionDataField; 
     } 
     set 
     { 
      this.extensionDataField = value; 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] 
    public ushort ClassId 
    { 
     get 
     { 
      return this.ClassIdField; 
     } 
     set 
     { 
      this.ClassIdField = value; 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] 
    public string InstanceId 
    { 
     get 
     { 
      return this.InstanceIdField; 
     } 
     set 
     { 
      this.InstanceIdField = value; 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, Order=2)] 
    public sbyte AttributeId 
    { 
     get 
     { 
      return this.AttributeIdField; 
     } 
     set 
     { 
      this.AttributeIdField = value; 
     } 
    } 
} 

이제 클래스를 직렬화 할 수 없습니다. 다음은 직렬화 코드입니다.

 cosemAttributeDescriptor cAttrD = new cosemAttributeDescriptor(); 
     cAttrD.ClassId = 3; 
     cAttrD.InstanceId = "0100010800FF"; 
     cAttrD.AttributeId = 0; 
     DataContractSerializer dSer = new DataContractSerializer(typeof(cosemAttributeDescriptor)); 
     StringBuilder sb = new StringBuilder(); 
     XmlWriter xW = XmlWriter.Create(sb); 
     dSer.WriteObject(xW, cAttrD); 

클래스를 직렬화하려고하면 빈 문자열이 생깁니다. 이견있는 사람?

답변

1

문제점을 발견했습니다. 이 방식의 직렬화는 단순히 작동하지 않지만 다음 코드는 동일한 효과가 있습니다.

DataContractSerializer dSer = new DataContractSerializer(typeof(cosemAttributeDescriptor)); 
MemoryStream mStr = new MemoryStream(); 
dSer.WriteObject(mStr, cAttrD); 
mStr.Position = 0; 
StreamReader sRead = new StreamReader(mStr); 
String result = sRead.ReadToEnd(); 
+0

답변 해주십시오. – capdragon