2014-06-09 32 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

相關問題