【问题标题】:Assign to Readonly Property分配给只读属性
【发布时间】:2016-10-27 15:27:22
【问题描述】:

您好,我想序列化一个对象,但是, 如果尝试反序列化 IEnumerable 我会收到此错误

无法将错误 75 属性或索引器“节点”分配给 -- 它是只读的

我的示例代码:

序列化部分。

FileStream fs = new FileStream(sv.FileName, FileMode.Create, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(fs, graphControl.Nodes);
fs.Close();

反序列化部分:

FileStream fs = new FileStream(op.FileName, FileMode.Open, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();

//Error Here

graphControl.Nodes = (IEnumerable<Node>)bin.Deserialize(fs);

节点类部分:

public List<Node> graphNodes = new List<Node>();
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<Node> Nodes { get { return graphNodes; } }

谁能帮帮我?

【问题讨论】:

    标签: c# serialization


    【解决方案1】:

    graphNodes 不应该是公开的,但既然是,就使用它:

    graphControl.graphNodes = (IEnumerable<Node>)bin.Deserialize(fs);
    

    但它确实不应该公开,所以这样更好:

    graphControl.Nodes.Clear();
    graphControl.Nodes.AddRange( (IEnumerable<Node>)bin.Deserialize(fs) );
    

    ...并将graphNodes设为私有。

    【讨论】:

      【解决方案2】:

      由于您有IEnumerable&lt;Node&gt;,您可能需要一次完成一项:

      graphControl.Nodes.Clear();
      
      var nodes = (IEnumerable<Node>)bin.Deserialize(fs);
      
      foreach(var node in nodes) {
          graphControl.Nodes.Add(node);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-27
        • 2019-05-08
        • 1970-01-01
        • 2019-12-06
        • 2020-02-17
        • 2020-04-08
        相关资源
        最近更新 更多