Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在C中序列化数组对象#_C#_Arrays_Xml_Serialization_Xmlserializer - Fatal编程技术网

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
只需要数组中两个声明类型的对象,而不需要一些嵌套数组。你会这么做吗?