首页 文章

datacontract的序列化异常

提问于
浏览
2

这就是它所说的:不期望输入数据协定名称为'ArrayOfItemType:ItemType'的'ItemType []' . 考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中 .

代码非常基本

DataContractSerializer ser = new DataContractSerializer(typeof(ItemType));
FileStream file = new FileStream("ItemType.xml", FileMode.Create); 
ser.WriteObject(file, itemTypes);

我试图序列化的对象是

protected static ItemType[] itemTypes = new ItemType[100];

派生自 class :

[DataContract(Namespace = "ItemType")]

public class ItemType 
{    
    string name;       
    private int numberOfActions; 

    [DataMember()]
    public int[] codeOfAction = new int[10];
    [DataMember()]
    public int[] recipeType;
    [DataMember()]
    public int[] recipeNum;

    public ItemType()
    {
        this.name = " ";        
        this.recipeType = new int[10];
        this.recipeNum = new int[10];
        this.recipeType[0] = 0;
    }
    [DataMember]
    public string ItemName
    {
        get {return name;}
        set { name = value; }
    }
    [DataMember]
    public int NumberOfAction
    {
        get { return numberOfActions; }
        set { numberOfActions = value; }  
    }    
}

1 回答

  • 3

    发生这种情况是因为序列化数组 . 但是在传递给构造函数类而不是数组的参数中 .

    更换

    DataContractSerializer ser = new DataContractSerializer(typeof(ItemType));
    

    DataContractSerializer ser = new DataContractSerializer(typeof(ItemType[]));
    

相关问题