C# 无法在C中序列化数组对象#
我有以下课程:C# 无法在C中序列化数组对象#,c#,arrays,xml,serialization,xmlserializer,C#,Arrays,Xml,Serialization,Xmlserializer,我有以下课程: public partial class ct_ServiceProductInfoWireless { private object[] itemsField; private bool directFulfillmentField; /// <remarks/> [System.Xml.Serialization.XmlElementAttribute("NewWirelessLines", typeof(ct_Wireless
public partial class ct_ServiceProductInfoWireless {
private object[] itemsField;
private bool directFulfillmentField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("NewWirelessLines", typeof(ct_WirelessLines))]
[System.Xml.Serialization.XmlElementAttribute("WirelessLine", typeof(ct_ServiceProductInfoWirelessWirelessLine))]
public object[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
怎么了
ct\U NewWirelessLine类别
public partial class ct_WirelessLines {
private ct_NewWirelessLine[] wirelessLineField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("WirelessLine")]
public ct_NewWirelessLine[] WirelessLine {
get {
return this.wirelessLineField;
}
set {
this.wirelessLineField = value;
}
}
}
public partial class ct_NewWirelessLine {
private ct_NewRatePlan ratePlanField;
private ct_DataPlan dataPlanField;
private ct_OrderDevice deviceField;
private ct_PhoneNumber telephoneNumberField;
private string lineNumberField;
private bool isPrimaryLineField;
}
public partial class ct_ServiceProductInfoWirelessWirelessLine {
private ct_Device deviceField;
private ct_RatePlan ratePlanField;
private ct_InstallmentPlan installmentPlanField;
private string paymentArrangementField;
private ct_OptionalFeature[] optionalPackagesField;
private ct_WirelessFeature[] optionalFeaturesField;
private string lineNumberField;
private string primarySQNumberField;
private string secondarySQNumberField;
private st_CustomerType customerTypeField;
private bool customerTypeFieldSpecified;
private string ppuZipField;
private string wtnField;
private bool directFulfillmentField;
private bool directFulfillmentFieldSpecified;
}
ct\U服务产品信息无线交换机类
public partial class ct_WirelessLines {
private ct_NewWirelessLine[] wirelessLineField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("WirelessLine")]
public ct_NewWirelessLine[] WirelessLine {
get {
return this.wirelessLineField;
}
set {
this.wirelessLineField = value;
}
}
}
public partial class ct_NewWirelessLine {
private ct_NewRatePlan ratePlanField;
private ct_DataPlan dataPlanField;
private ct_OrderDevice deviceField;
private ct_PhoneNumber telephoneNumberField;
private string lineNumberField;
private bool isPrimaryLineField;
}
public partial class ct_ServiceProductInfoWirelessWirelessLine {
private ct_Device deviceField;
private ct_RatePlan ratePlanField;
private ct_InstallmentPlan installmentPlanField;
private string paymentArrangementField;
private ct_OptionalFeature[] optionalPackagesField;
private ct_WirelessFeature[] optionalFeaturesField;
private string lineNumberField;
private string primarySQNumberField;
private string secondarySQNumberField;
private st_CustomerType customerTypeField;
private bool customerTypeFieldSpecified;
private string ppuZipField;
private string wtnField;
private bool directFulfillmentField;
private bool directFulfillmentFieldSpecified;
}
我能够重现错误信息
System.InvalidOperationException:在此上下文中不能使用ct\U WirelessLines[]类型。
通过将ct\u ServiceProductInfoWireless.Items
指定为ct\u无线线阵列的数组,而不是一维数组:
Items = new [] { new [] { new ct_WirelessLines() } }`
之所以编译此代码,是因为Items
只是一个对象数组,但不会序列化,因为XmlSerializer
只希望在属性中声明的两种类型的对象在数组中,而不是某些嵌套数组中。演示小提琴#1
解决方案是不这样做,而是使用平面1d阵列:
Items = new [] { new ct_WirelessLines() },
演示小提琴2
如果您有两个集合,一个是ct\U WirelessLines
,另一个是ct\U ServiceProductInfoWirelessSwirelessLine
,您可以将它们组合到最终的项
数组中,方法是将集合内容向上投射到对象
,然后使用和:
现在,以下内容甚至无法编译:
Items = new [] { new [] { new ct_WirelessLines() } }, //Compilation error (line 72, col 13): Cannot implicitly convert type 'ct_WirelessLines[][]' to 'WirelessItemBase[]'
Demo fiddle#4.请发布ct#U服务产品InfoWirelessSwirelessLine
和ct#U NewWirelessLine
类,因为当我创建这些自定义类时,它工作得很好,因此问题可能出在这些类的定义中。我无法准确指出问题在代码中的确切位置。然而,我发现下面的文章有一个类似的问题和一些答案。希望它能帮助你找到解决方法的线索。您有大量的类,开始时会注释掉许多属性,直到找到有问题的类定义。私有属性不会序列化。我能够得到错误消息System.invalidoOperationException:类型ct\u WirelessLines[]不能在此上下文中使用。
通过将ct\U ServiceProductInfoWireless.Items
指定为ct\U WirelessLines的数组而不是1d数组:Items=new[]{new[]{new ct\U WirelessLines()}
。演示小提琴:。代码可以编译,因为Items
只是一个对象数组,但不会序列化,因为XmlSerializer
只需要数组中两个声明类型的对象,而不需要一些嵌套数组。你会这么做吗?