2010-03-17 6 views
1

Я использовал svcutil, чтобы генерировать классы для доступа к веб-сервису. Мне нужно их сериализовать. Класс довольно прост, вот как он выглядитПроблема с сериализацией классов, синтезированных 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