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是一个非常重要的定制工具,用于实现如此简单的功能。