【问题标题】:How to implement xml serialization for custom types?如何实现自定义类型的xml序列化?
【发布时间】:2010-12-03 04:22:39
【问题描述】:

我有一些类型要序列化/反序列化并根据所选对象生成 UI。 UI 还将更改对象,而我必须对其进行序列化才能将其存储在我的应用程序中。

所以:

[obj_apple stored in the app] -> select obj_apple -> deserialize -> show in UI -> use the UI to change obj_apple -> deselect obj_apple -> serialize -> [obj_apple stored in the app]

对象必须被序列化/反序列化,并且该数据必须是字符串。这就是为什么我认为拥有一个 xml 序列化程序会更好。

哪种类型的序列化程序最好?有没有什么好的例子可以为自定义类型实现这个?

【问题讨论】:

    标签: c# .net serialization xml-serialization


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      字符串有几种选择; xml,可以简单地使用XmlSerializer(或DataContractSerializer,但对xml的控制要少得多)或JSON(JSON.net等)来完成。

      XmlSerializer 的典型类如下所示:

      public class Apple {
          public string Variety {get;set;}
          public decimal Weight {get;set;}
          // etc
      }
      

      (请注意,我希望上述内容也适用于 JSON.net)

      由于属性,上述类在数据绑定场景等中也应该可以正常工作。

      你可以序列化这个:

          Apple obj = new Apple { Variety = "Cox", Weight = 12.1M};
          XmlSerializer ser = new XmlSerializer(typeof(Apple));
      
          StringWriter sw = new StringWriter();
          ser.Serialize(sw, obj);
          string xml = sw.ToString();
      
          StringReader sr = new StringReader(xml);
          Apple obj2 = (Apple)ser.Deserialize(sr);
      

      但是你可以自定义xml:

      [XmlType("apple"), XmlRoot("apple")]
      public class Apple {
          [XmlAttribute("variety")]
          public string Variety {get;set;}
          [XmlAttribute("weight")]
          public decimal Weight {get;set;}
          // etc
      }
      

      DataContractSerializer理想情况下更像:

      [DataContract]
      public class Apple {
          [DataMember]
          public string Variety {get;set;}
          [DataMember]
          public decimal Weight {get;set;}
      }
      

      【讨论】:

      • 顺便说一句,马克,我可以使用 XmlSerializer ser = new XmlSerializer(typeof(obj.GetType()));我只是想知道 typeof 在这种情况下是否有优势?
      • 新 XmlSerializer(obj.GetType());
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2013-09-11
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多