Field is member of a type which is serializable but is of type which is not serializable

守給你的承諾、 提交于 2019-12-12 19:09:18

问题


I'm developing a C# library with .NET Framework 4.7.

I want to convert the class ProductionOrderXmlFile into a XML file:

[Serializable]
public class Level
{
    [XmlElement("Id")]
    public byte Id { get; set; }
    [XmlElement("Name")]
    public string Name { get; set; }
    [XmlElement("CodeType")]
    public byte CodeType { get; set; }
    [XmlElement("CodeSourceType")]
    public byte CodeSourceType { get; set; }
    [XmlElement("HelperCodeType")]
    public byte HelperCodeType { get; set; }
    [XmlElement("HelperCodeSourceType")]
    public byte HelperCodeSourceType { get; set; }
    [XmlElement("PkgRatio")]
    public int PkgRatio { get; set; }
}

[Serializable]
public class VarData
{
    [XmlElement("VariableDataId")]
    public string VariableDataId { get; set; }
    [XmlElement("LevelId")]
    public byte LevelId { get; set; }
    [XmlElement("Value")]
    public string Value { get; set; }
}

/// <summary>
/// Class to load a production order from a xml file.
/// </summary>
[Serializable, XmlRoot("root")]
public class ProductionOrderXmlFile
{
    [XmlElement("ProductionOrderName")]
    public string ProductionOrderName { get; set; }
    [XmlElement("NumItems")]
    public int NumItems { get; set; }
    [XmlElement("ProductCode")]
    public string ProductCode { get; set; }
    [XmlElement("Reduction")]
    public float Reduction { get; set; }
    [XmlArray("Levels")]
    [XmlArrayItem("Level")]
    public List<Level> Levels { get; set; }
    [XmlArray("VariableDatas")]
    [XmlArrayItem("VariableData")]
    public List<VarData> VariableData { get; set; }
}

But in fields public List<Level> Levels { get; set; } and public List<VarData> VariableData { get; set; } I get the warning:

Warning CA2235 Field Levels is a member of type ProductionOrderXmlFile which is serializable but is of type System.Collections.Generic.List which is not serializable

And:

Warning CA2235 Field VariableData is a member of type ProductionOrderXmlFile which is serializable but is of type System.Collections.Generic.List which is not serializable

What do I need to do to avoid those warnings?


回答1:


Lose the [Serializable]. Just throw it away - all of them. XmlSerializer doesn't care about it, and you don't need it. It isn't helping you, and is causing this false-positive warning.

[Serializable] relates essentially just to BinaryFormatter, which usually isn't a good choice.



来源:https://stackoverflow.com/questions/50833769/field-is-member-of-a-type-which-is-serializable-but-is-of-type-which-is-not-seri

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!