2014-06-09 31 views
-2

我有一个Table如何在列表中使用JsonConverter?

[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表示。路径'表。$值'。

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

编辑: 另外,我有需要,所以我需要一个解决方案,不停止工作我ContractResolver检索所有属性ContractResolver。

+0

再次阅读错误消息 - 与列表无关(这可以通过序列化一个'列表'显示) – user2864740

回答

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; } 
} 

现在呼吁在List<MyObject>JsonConvert.SerializeObject会给你的东西,看起来像这样:

​​

注意你需要引用System.Runtime.Serialization集和命名空间。

+0

我怎么能混合这与需要检索所有属性的ContractResolver(当我做一个备份到JSON文件)? – Jefecito

+0

@ user2524586在某些情况下,你想序列化所有的值,而在其他情况下,你只想序列化一些? –

+0

这是正确的。我有一个食物类型等发送给客户端(移动应用程序)的表格,在这一阶段我想尽可能少地发送,但是当我做JSON备份时,我想保存并序列化所有属性和字段(我的ContractResolver现在所做的)。 – Jefecito

相关问题