我无法从我的 xml 中删除 clsProduct 中的属性 Values 的名称。我尝试使用 [XmlElement(ElementName = "Values", Type = typeof(clsValues)]对于我的 List<clsValues>但它没有给我我需要的结果。
你可以在下面看到我需要的结果。
我的序列化类的一部分:
[Serializable]
public class clsProduct
{
[XmlAttribute("ID")]
public string ID { get; set; }
[XmlAttribute("UserTypeID")]
public string UserTypeID { get; set; }
[XmlArrayItem(ElementName = "Values", Type = typeof(clsValues))]
public List<clsValues> Values { get; set; }
}
[Serializable]
public class clsValues
{
[XmlElement(ElementName = "Value")]
public clsValue Value { get; set; }
[XmlArray(ElementName = "MultiValue"),
XmlArrayItem(ElementName = "Value")]
public List<clsValue> MultiValue { get; set; }
}
[Serializable]
public class clsValue
{
[XmlAttribute("AttributeID")]
public string AttributeID { get; set; }
[XmlText]
public string Value { get; set; }
}
我当前的 xml 结果:
<Product ID="PROD-01111010" UserTypeID="Product">
<Values>
<Values>
<Value AttributeID="ATTR-7196">201607280755</Value>
</Values>
<Values>
<Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
</Values>
<Values>
<MultiValue>
<Value>PLATTE</Value>
<Value>LUBRIFLON 225</Value>
<Value>PLAQUE</Value>
<Value>LUBRIFLON 22</Value>
</MultiValue>
</Values>
</Values>
</Product>
我需要的结果:
<Product ID="PROD-01111010" UserTypeID="Product">
<Values>
<Value AttributeID="ATTR-7196">201607280755</Value>
<Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
<MultiValue>
<Value>PLATTE</Value>
<Value>LUBRIFLON 225</Value>
<Value>PLAQUE</Value>
<Value>LUBRIFLON 22</Value>
</MultiValue>
</Values>
</Product>
有人可以帮忙吗?
谢谢
编辑: 当我使用
[XmlElement(ElementName = "Values", Type = typeof(clsValues))]
public List<clsValues> Values { get; set; }
而不是 XmlArrayItem我得到这个结果:
<Product ID="PROD-01111010" UserTypeID="Product">
<Values>
<Value AttributeID="ATTR-7196">201607280755</Value>
</Values>
<Values>
<Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
</Values>
<Values>
<MultiValue>
<Value>PLATTE</Value>
<Value>LUBRIFLON 225</Value>
<Value>PLAQUE</Value>
<Value>LUBRIFLON 22</Value>
</MultiValue>
</Values>
</Product>
最佳答案
您的问题与此属性有关:
[XmlArrayItem(ElementName = "Values", Type = typeof(clsValues))]
public List<clsValues> Values { get; set; }
这意味着有多个 元素称为Values,它们具有特定类型clsValues。其中每一个都有一个或两个 Value 或 MultiValue child 。
您希望数组成为元素Values,数组项成为两种不同元素类型之间的选择- 它包含一个 Value 元素或一个 MultiValue 元素。
你可以这样构造来实现:
public class Product
{
[XmlAttribute("ID")]
public string Id { get; set; }
[XmlAttribute("UserTypeID")]
public string UserTypeId { get; set; }
[XmlArray("Values")]
[XmlArrayItem("Value", typeof(Value))]
[XmlArrayItem("MultiValue", typeof(MultiValue))]
public List<object> Values { get; set; }
}
public class MultiValue
{
[XmlElement(ElementName = "Value")]
public List<Value> Values { get; set; }
}
public class Value
{
[XmlAttribute("AttributeID")]
public string AttributeId { get; set; }
[XmlText]
public string Text { get; set; }
}
参见 this fiddle用于工作演示。
关于C# 序列化从结果中删除属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38628797/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
如何在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