我关于 SO 的第一个问题 :,) 是关于 XmlSerializer 和命名空间问题。
我知道已经有很多关于如何从 Xml 文件的根元素中删除默认 Xml 命名空间的主题,这不是主题。
我的问题是如何在使用派生类时将其从子节点中删除?
我已经创建了我自己的序列化程序,它可以采用自定义命名空间或简单地忽略它们,并且它对根元素运行良好。
但是当我使用抽象类在 List 中列出一些派生类时,序列化会在每个派生类的节点中插入 2 个属性。
像这样:
<root>
<elements>
<element p3:type="XmlDerivedClass" xmlns:p3="{schema_url}" >
</element>
</elements>
</root>
至于我的类(class):
// Root element
[XmlRoot("root", Namespace="")]
public class XmlRootElement
{
List<XmlBaseClass> _Elements;
}
// Base class
[XmlInclude(typeof(XmlDerivedClass))] // Mandatory, prevents serialization errors
[XmlRoot(Namespace="")]
public abstract class XmlBaseClass
// Derived class
[XmlRoot("element", Namespace="")]
public class XmlDerivedClass : XmlBaseClass
我尝试了一些常见的解决方案:
我将尝试在 List 上添加 XmlInclude 标记,看看它是否改变了什么。
到目前为止,没有任何方法可以删除那些该死的命名空间...
如果有人对此有解决方案,我很乐意尝试。
[编辑 21/02/2014] 好吧,看来我是唯一面临这个问题的人。我将使用一个简单的 string.Replace 来删除无用的 XML,但这很脏。
PS:对于上下文,标签对于另一端的解析器来说不是问题,但不需要它们,所以我正在寻找一种方法来删除它们。
PS2:对于任何拼写错误,我深表歉意,英语不是我的母语。
最佳答案
我不确定这是否是满足您需求的解决方案,因为它不是很好,但它可以工作并且看起来不太脏。
public abstract class Abs
{
public int Data { get; set; }
}
public class A : Abs{}
public class B : Abs{}
[Serializable]
[XmlRoot(elementName: "name")]
public class Ser
{
[XmlElement(elementName: "A")]
public List<A> AList { get; set; }
[XmlElement(elementName: "B")]
public List<B> BList { get; set; }
[XmlIgnore]
public List<Abs> AbsList {
get
{
var list = new List<Abs>(AList.ConvertAll(x=>(Abs)x));
list.AddRange(BList.ConvertAll(x=>(Abs)x));
return list;
}
}
}
代替 XmlInclude,您可以创建一个包含派生类对象的列表,然后将它们添加在一起,或者可能将它们缓存在私有(private)成员中。 请再次注意,这仍然远非理想,但它对我有用,所以我想分享它。
关于c# - XmlSerializer + 抽象类 + 派生类 = 无用的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263952/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我