c# - C# 从类对象创建 xml 文件
问题描述
我公司有 17 种付款方式。当新用户加入时,默认情况下应分配所有这 17 种类型,并应生成如下所示的 xml
数据的 XML 表示:
<User>
<UserId>nnn</UserId>
<UserName>cccc</UserName>
<PaymentTypes>
<Payment>
<PaymentType>Payment_Type1</PaymentType>
<PaymentTypeID>1</PaymentTypeID>
<Setting>true</Setting>
</Payment>
<Payment>
<PaymentType>Payment_Type2</PaymentType>
<PaymentTypeID>2</PaymentTypeID>
<Setting>true</Setting>
</Payment>
.
.
.
<Payment>
<PaymentType>Payment_Type17</PaymentType>
<PaymentTypeID>17</PaymentTypeID>
<Setting>true</Setting>
</Payment>
</PaymentTypes>
</User>
我创建了一个类,它将所有 xml 元素保存为此调用的数据成员和数组类型
public partial class PaymentTypes {
private string paymentTypeField;
private byte paymentTypeIDField;
private bool settingField;
/// <remarks/>
public string PaymentType {
get {
return this.paymentTypeField;
}
set {
this.paymentTypeField = value;
}
}
/// <remarks/>
public byte PaymentTypeID {
get {
return this.paymentTypeIDField;
}
set {
this.paymentTypeIDField = value;
}
}
/// <remarks/>
public bool Setting {
get {
return this.settingField;
}
set {
this.settingField = value;
}
}
}
private PaymentTypes[] paymentTypesField;
public PaymentTypes[] PaymentTypes {
get {
return this.paymentTypesField;
}
set {
this.paymentTypesField = value;
}
}
我能够实例化类并分配值..
PaymentTypes pt = new PaymentTypes();
pt.PaymentType = "Payment_Type1";
pt.PaymentTypeID = 1;
pt.Setting = true;
PaymentTypes pt1 = new PaymentTypes();
pt1.PaymentType = "Payment_Type2";
pt1.PaymentTypeID = 2;
pt1.Setting = true;
.
.
.
PaymentTypes pt16 = new PaymentTypes();
pt16.PaymentType = "Payment_Type17";
pt16.PaymentTypeID = 17;
pt16.Setting = true;
// Insert payment types into the array.
PaymentTypes[] paymentTypes = { pt, pt1,.....,pt16 };
//assign all 17 payment types to user object
user.PaymentTypes = paymentTypes;
通过使用 xml 序列化程序,我能够生成上述输出 xml。
上述代码的缺点:效率不高。
- 我已经创建了
PaymentTypes
17 次类的实例,具有不同的值 - 17 个变量来保存不同的支付类型
- 更多的代码行
- 更多的执行时间
- 更多的内存消耗
问题:有没有更好的方法来定义所有 17 种支付类型并以最少的代码行或简单的方法或快速的方法分配给用户对象?
解决方案
您可以添加一个静态 Create() 方法,该方法为 PaymentTypes 类创建一个实例,并且您可以像下面这样以合同形式重写属性。
public partial class PaymentTypes {
public static Create(byte paymentTypeID, string paymentType, bool setting)
{
return new PaymentTypes
{
PaymentTypeID = paymentTypeID,
PaymentType = paymentType,
Setting = setting
};
}
/// <remarks/>
public string PaymentType { get; set; }
/// <remarks/>
public byte PaymentTypeID { get; set; }
/// <remarks/>
public bool Setting { get; set; }
}
然后您可以通过这种方式将付款类型分配给用户:
//assign all 17 payment types to user object
user.PaymentTypes = new PaymentTypes[]
{
PaymentTypes.Create(1, "Payment_Type1", true),
PaymentTypes.Create(2, "Payment_Type2", false),
....
PaymentTypes.Create(17, "Payment_Type17", true)
};
或者没有 Create() 静态方法:
//assign all 17 payment types to user object
user.PaymentTypes = new PaymentTypes[]
{
new PaymentTypes{ PaymentTypeID = 1, PaymentType = "PaymentType_1", Setting = true },
new PaymentTypes{ PaymentTypeID = 2, PaymentType = "PaymentType_2", Setting = false },
....
new PaymentTypes{ PaymentTypeID = 17, PaymentType = "PaymentType_17", Setting = true }
};
对于内存消耗,我在您的代码中看不到任何问题,因为实际上您需要分配 17 个 PaymentType 类的实例,并且由于这些类是引用类型,因此它们未在堆栈内存中分配。
推荐阅读
- python - Django rest框架:防止一个用户删除/编辑/查看ModelViewSet中的其他用户
- kubernetes - Kubernetes StatefulSet AntiAffinity 不起作用
- ios - React-i18next 无法仅在 iOS 上加载翻译
- amazon-quicksight - Amazon Quicksight 只保存了我的仪表板的一部分
- python - 如何将用户的输入与文件文本进行比较?
- android - 我更改了 Android 模拟器,我的应用程序在本机反应中有 marginTop
- sql - 将 SQL 1 连接到多个表
- java - 如何模拟 GenericData.Record
- java - Selenium Java clear 方法不会清除输入字段?
- ios - Quick Look 需要在允许 AR 之前最小化浏览器