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

C# 如何将JsonConverter与列表一起使用?,c#,json.net,C#,Json.net,我有一张表格 [JsonConverter(typeof(ToTableJsonConverter))] class MyTable : Table {} 内部类ToTableJsonConverter:JsonConverter { 公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器) { 变量表=(列表)值; var数组=tables.ToArray(); writer.WriteValue(数组); } } 我有一个消息类,如

我有一张
表格

[JsonConverter(typeof(ToTableJsonConverter))]
class MyTable : Table
{}
内部类ToTableJsonConverter:JsonConverter
{
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
变量表=(列表)值;
var数组=tables.ToArray();
writer.WriteValue(数组);
}
}
我有一个消息类,如下所示:

class Message
{
    public List<Table.Table> Tables { get; set; }
}
[
    { "x": "apple", "y": 5 },
    { "x": "banana", "y": 8 }
]
类消息
{
公共列表表{get;set;}
}
错误消息:

不支持的类型:
PokerServer.Table.Table菠萝
。使用
JsonSerializer
类获取对象的JSON表示。路径“Tables.$values”

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

编辑
另外,我有一个需要检索所有属性的ContractResolver,因此我需要一个不会阻止我的ContractResolver工作的解决方案。

如果您的目标是只发送某些属性,那么您应该使用
[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
,将得到如下结果:

class Message
{
    public List<Table.Table> Tables { get; set; }
}
[
    { "x": "apple", "y": 5 },
    { "x": "banana", "y": 8 }
]

注意:您需要引用
系统.Runtime.Serialization
程序集和命名空间。

再次阅读错误消息-与列表无关(这可以通过序列化
列表来轻松显示)
),我如何将其与需要检索所有属性的ContractResolver混合使用(当我备份到JSON文件时)?@user2524586在某些情况下,您希望序列化所有值,而在其他情况下,您只希望序列化部分值?这是正确的。我有一个包含食物类型等的表,发送给客户端(一个移动应用程序),在这一阶段,我希望发送尽可能少的内容,但当我进行JSON备份时,我希望保存并序列化所有属性和字段(我的ContractResolver现在就是这么做的)。@user2524586我会使用我在回答中显示的内容来完成这一操作,但是创建两个模型类:一个用于备份,一个用于客户端。ContractResolver是一个非常重要的定制工具,用于实现如此简单的功能。