簡體   English   中英

C# 可以使用 Json 序列化枚舉描述而不是枚舉值

[英]C# Possible To Serialise Enum description instead Enum value With Json

我遇到過從兩個不同的 Web 服務收到響應的情況。 這兩個響應在結構上是相同的,但具有不同的父命名空間。 我想要做的是將這些響應轉換為一個標准類,然后我可以傳遞給父對象。 我認為最簡單的方法是將傳入的對象序列化為 Json,然后將對象反序列化為我的標准對象。 這使我的處理代碼相當簡單

var jsonString = JsonConvert.SerializeObject(serviceResponse.Results);
var commonObject = JsonConvert.DeserializeObject<StandardResult>(jsonString);

在大多數情況下,這是有效的。 但是,我在擴展 StandardResult 對象時發現了一些問題。

對象的屬性之一是具有以下屬性的類:

public class EntryDetailType
{
public string EntryNumber {get; set;}
public string EntryText {get; set;
public int Item {get; set;}
}

問題是Item實際上可以是傳入數據中的兩個不同枚舉之一。 因此,盡管轉換正確地將枚舉的值放入Item我不知道該值指的是哪個枚舉。 在這個階段我沒有使用 JsonConverter 類,因為對象非常大,如果可能的話,我想避免這種情況。

作為此過程的一部分,是否有一種方法可以獲取枚舉的描述而不是值,還是我將被迫編寫自己的 json 轉換器? 請記住, EntryDetailType類不在我的項目中。 它是通過 wsdl 文檔添加的 Web 服務的返回類型。

好吧,如果類EntryDetailType確實有一個名為Item的類型為int的屬性,則無法推斷您擁有的enum哪個名稱表示值。

但是,如果該類具有任何enum類型的屬性Item ,那么它就像使用內置StringEnumConverter作為 SerializeObject 方法的第二個參數序列化為 Json 一樣簡單:

var jsonString = JsonConvert.SerializeObject(serviceResponse.Results, new Newtonsoft.Json.Converters.StringEnumConverter()); 

ps:我假設您使用的是 NewtonSoft 的 Json.NET。

暫無
暫無

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

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