2010-03-17 54 views
1

我使用svcutil來生成訪問Web服務的類。我需要序列化它們。類是相當簡單的,下面是它的外觀svcutil合成類的序列化問題

[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 2011-01-03 21:21:20