How to (xml) serialize a uri

前端 未结 6 2311
南笙
南笙 2020-12-18 20:02

I have a class I\'ve marked as Serializable, with a Uri property. How can I get the Uri to serialize/Deserialize without making the property of type string?

6条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-18 20:28

    For others who found this question and who didn't like the solutions, there is another more flexible and powerful solution. It's implementation IXmlSerializable interface. This more difficult, but it's worth it. You can create any xml that you would like. The simplest example is:

    public class Product : IXmlSerializable
    {
        public string Code { get; set; }
    
        public string Model { get; set; }
    
        public string Name { get; set; }
    
        public Uri ImageUri { get; set; }
    
        public virtual System.Xml.Schema.XmlSchema GetSchema()
        {
            throw new NotImplementedException();
        }
    
        public virtual void ReadXml(XmlReader reader)
        {
            reader.MoveToContent();
            Code = reader.GetAttribute("Code");
            Model = reader.GetAttribute("Model");
            Name = reader.GetAttribute("Name");
            if (reader.ReadToDescendant("Image") && reader.HasAttributes)
                ImageUri = new Uri(reader.GetAttribute("Src"));
        }
    
        public virtual void WriteXml(XmlWriter writer)
        {
            writer.WriteAttributeString("Code", Code);
            writer.WriteAttributeString("Model", Model);
            writer.WriteAttributeString("Name", Name);
            if (ImageUri != null)
            {
                writer.WriteStartElement("Image");
                writer.WriteAttributeString("Src", ImageUri.AbsoluteUri);
                writer.WriteEndElement();
            }
        }
    }
    

    And you get something like this in xml:

    
        
    
    

提交回复
热议问题