2012-08-30 37 views
1

我試圖序列化DataContract ..... 我想重命名DataMember。在序列化期間重命名DataMember

這是我的DataContract

[DataContract(Name = "Sample")] 
[Serializable] 
public struct Sample 
{ 

     public string CompanyName; 


     public string AddressLine; 

     [DataMember(Name="AddressLineRename")] 
     public string AddressLine2; 

     public string City; 

} 

是序列化到:

<Sample> 
    <CompanyName>aaa</CompanyName> 
    <AddressLine>16 aaaa</AddressLine> 
    <AddressLine2>Unit 66</AddressLine2> 
    <City>Houston</City> 
</Sample> 

我需要的是:

<Sample> 
    <CompanyName>aaa</CompanyName> 
    <AddressLine>16 aaaa</AddressLine> 
    <AddressLineRename>Unit 66</AddressLineRename> 
    <City>Houston</City> 
</Sample> 

我希望 「AddressLine2」 被序列化到「 AddressLineRename」。

Thanks. 

回答

1

這解決了重命名DataMember。

[DataMember(Order = 2, Name = "AddressLineRename", IsRequired = true)] 
    [XmlElement("AddressLineRename")] 
    public string AddressLine2; 
0

您可能需要執行ISerializable來自定義序列化過程。

我認爲你需要添加的代碼會看起來像:

public Sample(SerializationInfo info, StreamingContext context) 
{ 
    CompanyName = info.GetString("CompanyName"); 
    // ... 
    AddressLine2 = info.GetString("AddressLineRename"); 
    // ... 
} 

public void GetObjectData(SerializationInfo info, StreamingContext context) 
{ 
    info.AddValue("CompanyName", CompanyName); 
    // ... 
    info.AddValue("AddressLineRename", AddressLine2); 
    // ... 
} 

the MSDN for ISerializable

+0

從我在哪裏需要調用 - 樣品(SerializationInfo中.. ...)和GetObjectData()....... – user1282609

0

在我來說,我只是解決了添加序參量數據成員

[DataMember(Order = 2, Name = "AddressLineRename")] 
public string AddressLine2; 

不知道爲什麼..