System.Drawing.Font
类不是 XML 可序列化的,因为它没有默认(空)构造函数。
尽管如此,是否有一些解决方法或替代方法来序列化 Font
?
最佳答案
编辑:我根据 Regent 更新了代码建议使用 FontConverter
,同时保留将 SerializableFont
用作常规 Font
的能力。
public class SerializableFont
{
public SerializableFont()
{
FontValue = null;
}
public SerializableFont(Font font)
{
FontValue = font;
}
[XmlIgnore]
public Font FontValue { get; set; }
[XmlElement("FontValue")]
public string SerializeFontAttribute
{
get
{
return FontXmlConverter.ConvertToString(FontValue);
}
set
{
FontValue = FontXmlConverter.ConvertToFont(value);
}
}
public static implicit operator Font(SerializableFont serializeableFont)
{
if (serializeableFont == null )
return null;
return serializeableFont.FontValue;
}
public static implicit operator SerializableFont(Font font)
{
return new SerializableFont(font);
}
}
public static class FontXmlConverter
{
public static string ConvertToString(Font font)
{
try
{
if (font != null)
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font));
return converter.ConvertToString(font);
}
else
return null;
}
catch { System.Diagnostics.Debug.WriteLine("Unable to convert"); }
return null;
}
public static Font ConvertToFont(string fontString)
{
try
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font));
return (Font)converter.ConvertFromString(fontString);
}
catch { System.Diagnostics.Debug.WriteLine("Unable to convert"); }
return null;
}
}
用法:当您有一个Font
属性时,将其声明为SerializableFont
。这将允许它被序列化,而隐式转换将为您处理转换。
而不是写:
Font MyFont {get;set;}
写:
SerializableFont MyFont {get;set;}
关于c# - 如何 XmlSerialize System.Drawing.Font 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940127/