00001 using System;
00002 using System.Collections.Generic;
00003 using System.Linq;
00004 using System.Text;
00005 using System.Xml.Serialization;
00006
00007 namespace NewGamePhysics.Utilities
00008 {
00012 public sealed class SerializableUri : IXmlSerializable
00013 {
00017 private Uri _uri = null;
00018
00022 public Uri Uri
00023 {
00024 get
00025 {
00026 return this._uri;
00027 }
00028 set
00029 {
00030 this._uri = value;
00031 }
00032 }
00033
00037 public SerializableUri()
00038 {
00039 }
00040
00045 public SerializableUri(Uri uri)
00046 {
00047 if (uri == null)
00048 {
00049 throw new ArgumentNullException("uri", "Uri cannot be null.");
00050 }
00051
00052 this._uri = uri;
00053 }
00054
00059 public SerializableUri(string uri)
00060 {
00061 if (String.IsNullOrEmpty(uri))
00062 {
00063 throw new ArgumentNullException("uri", "Uri cannot be null.");
00064 }
00065
00066 this._uri = new Uri(uri);
00067 }
00068
00074 public static implicit operator Uri(SerializableUri uri)
00075 {
00076 return uri.Uri;
00077 }
00078
00084 public static implicit operator SerializableUri(Uri uri)
00085 {
00086 return new SerializableUri(uri);
00087 }
00088
00089 #region IXmlSerializable_members
00090
00095 System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
00096 {
00097 return null;
00098 }
00099
00104 void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
00105 {
00106 try
00107 {
00108 this._uri = new Uri(reader.ReadString());
00109 }
00110 catch (Exception)
00111 {
00112 this._uri = null;
00113 }
00114 }
00115
00120 void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
00121 {
00122 writer.WriteString((this._uri != null) ? this._uri.AbsoluteUri : "");
00123 }
00124
00125 #endregion
00126
00131 public override string ToString()
00132 {
00133 return (this._uri != null) ? this._uri.AbsoluteUri : null;
00134 }
00135 }
00136 }