簡體   English   中英

將帶有元組和枚舉的字典轉換為 JSON

[英]Converting Dictionary with tuple and enum to JSON

在我的 class 中,我的枚舉定義如下:

public enum ChangeType { 
  [EnumMember(Value ="Added")]
  Added,
  [EnumMember(Value = "Removed")]
  Removed,
  [EnumMember(Value = "Updated")]
  Updated 
}

在 class 定義中,我有一個屬性:

public 
  Dictionary<string, (ChangeType changType, string oldValue, string newValue)> 
  PropertyChanges { get; set; }

要求:

  1. 轉換為 JSON 時,changeType 應該是文本,而不是數字
  2. 元組應使用項目名稱而不是 Item1、Item2 和 Item3 進行轉換

我試過的:

  • 至於枚舉,我嘗試將 JsonConverter(typeof(StringEnumConverter))] 放在屬性前面(不行)
  • 不能對命名元組提出任何建議

問題:

我可以在不編寫自定義轉換器來轉換整個 class 的情況下實現上述目標嗎?

謝謝!

ValueTuple 的鍵名在編譯后基本不存在, 除了在某些屬性中,所以序列化器獲取的類型信息不包含名稱。

因此,您必須使用 class 來控制序列化名稱,而不是使用 ValueTuple。

它實際上並沒有我想象的那么糟糕...... JsonConvert.SerializeObject() 已經在序列化 Dictionary<> 方面做得很好,所以我所要做的就是幫助 Json 解釋枚舉和元組。

首先,我創建了一個名為CustomTupleConverter的 class ,它實現了 JsonConverter<(ChangeType changeType, string oldValue, string newValue)>

在 WriteJson() 的實現中,我有以下內容:

writer.WriteStartObject();
writer.WritePropertyName("Action");
writer.WriteValue(value.changeType.ToString());
writer.WritePropertyName("OldValue");
writer.WriteValue(value.oldValue.ToString());
writer.WritePropertyName("NewValue");
writer.WriteValue(value.newValue.ToString());
writer.WriteEndObject();

調用JsonConvert.SerializeObject()時,我只需將轉換器的實例化添加到調用中:

JsonConvert.SerializeObject(cc, Formatting.Indented, new CustomTupleConverter());

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM