有一个问题困扰着我,让我在 Stack Overflow 上注册。目前,如果我想将 Color 序列化为名为 color 的 XML 字符串,或者 #rrggbb,或者 #aarrggbb,我会这样做:
[XmlIgnore()]
public Color color;
[XmlElement(ElementName = "Color")]
public String color_XmlSurrogate
{
get { return MyColorConverter.SetColor(color); }
set { color = MyColorConverter.GetColor(value); }
}
这里 MyColorConverter 以我喜欢的方式进行序列化。但这一切感觉就像是一场大乱斗,还有额外的领域等等。有没有办法让它在更少的行中工作,也许将 TypeDescriptor 与与 XML 相关的 C# 属性连接起来?
最佳答案
这是我用来序列化 XML 中的 Color 结构的东西。在我看来,这比隐藏主要的 Color 属性要好。欢迎提出任何建议。
XmlColor 类主要依赖于隐式运算符 语言功能来提供关键数据转换。没有这个,这个类基本上是无用的。添加了其他一些功能来完善类(class)。
XmlColor 助手还提供了一种方便的方法来分离颜色分量。我添加了 Alpha 属性来显示这一点。请注意,如果 Alpha 组件一直增加到 255,它就不会被序列化。
反序列化 Web 颜色值结合了当前存储在实例中的 Alpha 值。解析属性的顺序无关紧要。如果 XML 源中缺少 Alpha 属性,实例组件值将用于设置 Alpha 级别。这可以说是错误的;然而,在 XML 序列化的情况下,XmlColor 类将初始化为 Color.Black,将 Alpha 设置为 255。
我在 VS2010 环境下工作并针对 .Net 4 进行构建。我不知道代码与以前版本的兼容性如何。
这是一个应该序列化为 XML 的示例属性:
[XmlElement(Type=typeof(XmlColor))]
public Color MyColor { get; set; }
这是 XmlColor 辅助类:
public class XmlColor
{
private Color color_ = Color.Black;
public XmlColor() {}
public XmlColor(Color c) { color_ = c; }
public Color ToColor()
{
return color_;
}
public void FromColor(Color c)
{
color_ = c;
}
public static implicit operator Color(XmlColor x)
{
return x.ToColor();
}
public static implicit operator XmlColor(Color c)
{
return new XmlColor(c);
}
[XmlAttribute]
public string Web
{
get { return ColorTranslator.ToHtml(color_); }
set {
try
{
if (Alpha == 0xFF) // preserve named color value if possible
color_ = ColorTranslator.FromHtml(value);
else
color_ = Color.FromArgb(Alpha, ColorTranslator.FromHtml(value));
}
catch(Exception)
{
color_ = Color.Black;
}
}
}
[XmlAttribute]
public byte Alpha
{
get { return color_.A; }
set {
if (value != color_.A) // avoid hammering named color if no alpha change
color_ = Color.FromArgb(value, color_);
}
}
public bool ShouldSerializeAlpha() { return Alpha < 0xFF; }
}
关于c# - Color 结构的最优雅的 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280362/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应
使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p
假设我有以下类(class):classPersondefinitialize(name,age)@name=name@age=ageenddefget_agereturn@ageendend我有一组Person对象。是否有一种简洁的、类似于Ruby的方法来获取最小(或最大)年龄的人?如何根据它对它们进行排序? 最佳答案 这样做会:people_array.min_by(&:get_age)people_array.max_by(&:get_age)people_array.sort_by(&:get_age)
让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来