.NET对象序列化—IPAddress
时间:2011-05-05 来源:Asharp
IPAddress没有默认的构造函数,不能正常序列化。IPAddrss支持的构造函数有:
1: public IPAddress(byte[] address);
2: public IPAddress(long newAddress);
3: public IPAddress(byte[] address, long scopeid);
示例代码:
1: class Program
   2: {
    3: static void Main(string[] args)
   4:     {
    5: TestClass testClass = new TestClass();
   6:         
    7: using (MemoryStream stream = new MemoryStream())
   8:         {
    9: XmlSerializer ser = new XmlSerializer(typeof(TestClass));
  10:             ser.Serialize(stream, testClass);
    11: string result = Encoding.UTF8.GetString(stream.ToArray());
  12:         }
      13:     }
      14: }
      15:  
    16: public class TestClass
  17: {
    18: public IPAddress IP { get; set; }
  19: }
  
运行时提示:
解决方案,扩展IPAddress:
   1: class Program
       2: {
       3:     static void Main(string[] args)
       4:     {
       5:         TestClass testClass = new TestClass();
       6:         testClass.IP.IPAddressAsString = "127.0.0.1";
       7:         
       8:         using (MemoryStream stream = new MemoryStream())
       9:         {
      10:             XmlSerializer ser = new XmlSerializer(typeof(TestClass));
      11:             ser.Serialize(stream, testClass);
      12:             string result = Encoding.UTF8.GetString(stream.ToArray());
      13:         }
      14:     }
      15: }
      16:  
      17: public class TestClass
      18: {
      19:     public IPAddressEx IP { get; set; }
      20:  
      21:     public TestClass()
      22:     {
      23:         this.IP = new IPAddressEx();
      24:     }
      25: }
      26:  
      27: public class IPAddressEx
      28: {
      29:     [XmlElement(ElementName = "IPAddress")]
      30:     public string IPAddressAsString
      31:     {
      32:         get { return IPAddress != null ? IPAddress.ToString() : null; }
      33:         set
      34:         {
      35:             IPAddress ip;
      36:             if (value != null && IPAddress.TryParse(value, out ip))
      37:                 IPAddress = ip;
      38:             else
      39:                 IPAddress =null;
      40:         }
      41:     }
      42:     [XmlIgnore]
      43:     public IPAddress IPAddress { get; set; }
      44: }
  
序列化结果:
1: <?xml version="1.0"?>
2: <TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3: <IP>
4: <IPAddress>127.0.0.1</IPAddress>
5: </IP>
6: </TestClass>
6: </TestClass>
 相关阅读 更多 + 
    
  










