我有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工作的解决方案。
答案 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
程序集和命名空间。