如何将JsonConverter与列表一起使用?

时间:2014-06-09 17:12:23

标签: c# json.net

我有Table

[JsonConverter(typeof(ToTableJsonConverter))]
class MyTable : Table
{}
internal class ToTableJsonConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var tables = (List<Table.Table>)value;
        var array = tables.ToArray();
        writer.WriteValue(array);
    }

}

我有一个消息类,如下所示:

class Message
{
    public List<Table.Table> Tables { get; set; }
}

错误讯息:

  

不支持的类型:PokerServer.Table.TablePineapple。使用JsonSerializer类来获取对象的JSON表示。 Path'Tables. $ values'。

我可以看到错误消息,但我不知道该怎么做。最终目标是使用JsonConverter仅发送必要的属性,而无需设置所有属性。

修改: 此外,我有一个ContractResolver需要检索所有属性,所以我需要一个不会阻止我的ContractResolver工作的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您的目标是仅发送特定属性,则应使用[DataContract][DataMember][IgnoreDataMember]属性执行此操作。

[DataContract]
class MyObject
{
    [DataMember(Name = "x")]
    public string X { get; set; }

    [DataMember(Name = "y")]
    public int Y { get; set; }

    [IgnoreDataMember]
    public double Z { get; set; }
}

现在在JsonConvert.SerializeObject上调用List<MyObject>会给你一些看起来像这样的东西:

[
    { "x": "apple", "y": 5 },
    { "x": "banana", "y": 8 }
]

请注意,您需要引用System.Runtime.Serialization程序集和命名空间。