This commit is contained in:
96
PROMS/Volian.Svg.Library/SvgSerializer.cs
Normal file
96
PROMS/Volian.Svg.Library/SvgSerializer.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
using System.IO;
|
||||
|
||||
namespace Volian.Svg.Library
|
||||
{
|
||||
public static class SvgSerializer<T> where T : class
|
||||
{
|
||||
public static string StringSerialize(T t)
|
||||
{
|
||||
string strOutput = string.Empty;
|
||||
XmlSerializer xs = new XmlSerializer(typeof(T),"http://www.w3.org/2000/svg");
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
xs.Serialize( new NonXsiTextWriter(ms,Encoding.UTF8), t);
|
||||
//xs.Serialize(ms, t);
|
||||
ms.Position = 0;
|
||||
StreamReader sr = new StreamReader(ms);
|
||||
strOutput = sr.ReadToEnd();
|
||||
ms.Close();
|
||||
}
|
||||
return strOutput;
|
||||
}
|
||||
public static T StringDeserialize(string s)
|
||||
{
|
||||
T t;
|
||||
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/svg");
|
||||
UTF8Encoding enc = new UTF8Encoding();
|
||||
Byte[] arrBytData = enc.GetBytes(s);
|
||||
using (MemoryStream ms = new MemoryStream(arrBytData))
|
||||
{
|
||||
t = (T)xs.Deserialize(ms);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
public static void WriteFile(T t, string fileName)
|
||||
{
|
||||
string strOutput = string.Empty;
|
||||
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/svg");
|
||||
using (FileStream fs = new FileStream(fileName, FileMode.Create))
|
||||
{
|
||||
xs.Serialize(new NonXsiTextWriter(fs,Encoding.UTF8), t);
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
public static T ReadFile(string fileName)
|
||||
{
|
||||
T t;
|
||||
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/svg");
|
||||
using (FileStream fs = new FileStream(fileName, FileMode.Open))
|
||||
{
|
||||
t = (T)xs.Deserialize(fs);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
}
|
||||
public class NonXsiTextWriter : XmlTextWriter
|
||||
{
|
||||
public NonXsiTextWriter( TextWriter w ) : base( w ) {}
|
||||
public NonXsiTextWriter( Stream w, Encoding encoding ) : base( w, encoding ) {
|
||||
this.Formatting = Formatting.Indented;
|
||||
}
|
||||
public NonXsiTextWriter( string filename, Encoding encoding ) : base( filename, encoding ) {}
|
||||
bool _skip = false;
|
||||
public override void WriteStartAttribute( string prefix, string localName, string ns )
|
||||
{
|
||||
if ((prefix == "xmlns" && (localName == "xsd" || localName == "xsi")) || // Omits XSD and XSI declarations.
|
||||
ns == XmlSchema.InstanceNamespace ) // Omits all XSI attributes.
|
||||
{
|
||||
_skip = true;
|
||||
return;
|
||||
}
|
||||
if(localName == "xlink_href")
|
||||
base.WriteStartAttribute(prefix, "xlink:href", ns);
|
||||
else
|
||||
base.WriteStartAttribute( prefix, localName, ns );
|
||||
}
|
||||
public override void WriteString( string text ) {
|
||||
if ( _skip ) return;
|
||||
base.WriteString( text );
|
||||
}
|
||||
public override void WriteEndAttribute()
|
||||
{
|
||||
if ( _skip )
|
||||
{ // Reset the flag, so we keep writing.
|
||||
_skip = false;
|
||||
return;
|
||||
}
|
||||
base.WriteEndAttribute();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user