反序列化后运行代码

时间:2014-10-15 19:30:02

标签: c# restsharp

我正在使用RestSharp来反序列化某些数据。这工作正常,所有数据都正确加载,但是我的一个字段是csv格式(不幸的是我无法更改),我需要解析该数据并将其加载到我的对象中。

构造我的类的好方法是什么,以便当“data”对象收到值时运行loadData()内的代码?我基本上想避免在使用每个对象之前自己运行loadData,因为我的SkaterData对象创建了20多次。

这就是我的班级结构:

public class SkaterData
{
    public int id { get; set; }
    public string data { get; set; }
    public PlayerData PlayerData { get; set; }

    public void loadData()
    {
        var dataRows = data.Split(',');
        PlayerData = new PlayerData(Int32.Parse(dataRows[0]), dataRows[1], dataRows[2]);
    }
}

public class PlayerData
{
    public int Number { get; set; }
    public string Position { get; set; }
    public string Name { get; set; }

    public PlayerData(int number, string position, string name)
    {
        this.Name = name;
        this.Position = position;
        this.Number = number;
    }
}

2 个答案:

答案 0 :(得分:2)

getter和setter都是函数,这意味着你可以这样写:

private string _data;
public int id { get; set; }

public string data
{
    get { return _data; }
    set
    {
        _data = value;
        loadData();
    }
}

public PlayerData PlayerData { get; set; }

public void loadData()
{
    var dataRows = data.Split(',');
    PlayerData = new PlayerData(Int32.Parse(dataRows[0]), dataRows[1], dataRows[2]);
}

在上面的代码示例中,我明确定义了data属性(您使用的语法只是sytantic sugar)。然后我将loadData添加到此属性的setter中。

由于这个setter会在反序列化时被调用(可能),你可能需要一个与我所拥有的略有不同的变体,但很难说它会基于你的问题陈述。

答案 1 :(得分:0)

我很确定这是OnDeserializedAttribute的用途,但我无法使用XmlSerializer(编辑:那是因为it doesn't implement it I guess)。

[OnDeserialized()]
internal void OnDeserializedMethod(StreamingContext context)
{

}