我有部分xml文档
<Tender SubTenderType="BC" TenderType="Check">
<TenderTotal>
<Amount>10.00</Amount>
</TenderTotal>
</Tender>
我需要把它转换成课程。
public class Tender
{
public string SubTenderType { get; set; }
public string TenderType { get; set; }
public decimal Amount { get; set; }
}
我已经写过的和这项工作。但我可以将xml反序列化为类,如上所述?
[Serializable]
public class Tender
{
[XmlAttribute("SubTenderType")]
public string SubTenderType { get; set; }
[XmlAttribute("TenderType")]
public string TenderType { get; set; }
[XmlElement("TenderTotal")]
public TenderTotal TenderTotal { get; set; }
}
[Serializable]
public class TenderTotal
{
[XmlElement("Amount")]
public decimal Amount { get; set; }
}
答案 0 :(得分:0)
您可以将xml反序列化为第一个Type&#34; Tender&#34;然后使用autoMapper来映射你的类型(创建不同类型的新对象)
创建地图:
config.CreateMap<TenderFirst, TenderSecond>().ForMember(x => x.TenderTotal.Amount, y => y.Amount ())
答案 1 :(得分:0)
您可以通过实施IXmlSerializable
使用xml自定义序列化来实现。但是,对于自定义序列化,您将受到性能损失
您可以查看这篇文章Custom XML Serialization
答案 2 :(得分:0)
拥有以下没有public class Tender
{
public string SubTenderType { get; set; }
public string TenderType { get; set; }
public decimal Amount { get; set; }
}
的课程:
XmlAttributeOverrides
您可以使用var attrSTT = new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("SubTenderType") };
var attrTT = new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("TenderType") };
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Tender), nameof(Tender.SubTenderType), attrSTT);
overrides.Add(typeof(Tender), nameof(Tender.TenderType), attrTT);
var xs = new XmlSerializer(typeof(Tender), overrides);
类来覆盖序列化程序的行为,使得它不会使用元素来执行属性。
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:postgres510@localhost/height_collector'
db = SQLAlchemy(app)
class Data(db.Model):
__tablename__ = "data"
id = db.Column(db.Integer, primary_key=True)
email_ = db.Column(db.String(120), unique=True)
height_ = db.Column(db.Integer)
def __init__(self, email_, height_):
self.email_ = email_
self.heigth_ = height_
@app.route("/")
def index():
return render_template("index.html")
@app.route("/success", methods=['post'])
def success():
if request.method == 'POST':
email = request.form["email_name"]
height = request.form["height_name"]
print(email, height)
return render_template("success.html")
if __name__ == '__main__':
app.debug = True
app.run()
但是,这样就不可能添加新项目或将一个元素包装在另一个元素中。
因此,您必须执行自定义序列化,或将一种类型映射到另一种类型,或编写自定义xml读取器/写入器,或手动执行读/写(例如,使用linq2xml)。有很多方法......