【问题标题】:Rename DataMember during Serialization在序列化期间重命名 DataMember
【发布时间】:2012-08-30 01:26:02
【问题描述】:

我正在尝试序列化 DataContract ..... 我想重命名 DataMember。

这是我的数据合同

[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.

【问题讨论】:

    标签: datamember


    【解决方案1】:

    这解决了重命名 DataMember。

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

    【讨论】:

      【解决方案2】:

      您可能需要自己实现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

      【讨论】:

      • 我需要从哪里调用 - Sample(SerializationInfo.....) 和 GetObjectData()......
      【解决方案3】:

      在我的情况下,我解决了只是将 order 参数添加到 DataMember

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

      不知道为什么..

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 2020-10-14
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多