C 中的列舉自定義JSON屬性名的處理

2021-10-12 17:52:12 字數 1473 閱讀 2492

在和底層c++進行資料傳輸時,用的是json格式的字串,奈何c++的命名和規範和c#很不搭。為了保持c#**的整潔和避免混淆的問題,決定在實體類上加json特性來處理。

底層傳遞訊息物件的json格式:

介面中的實體物件封裝:

class messageentity

public string message

public messagekind messagekind

public popkind popkind

}enum messagekind

enum popkind

問題是這樣的物件封裝肯定和json資料對不上,所以就要介紹本次文章的中點。newtonsoft.json中的特性

jsonproperty

加了這個特性,能對字段進行另外命名,但這個特性不能對列舉生效。

[jsonproperty(propertyname = 「mid」)]

還有直接建構函式的形式

[jsonproperty(「mid」)]

jsonconverter(typeof(stringenumconverter))

這個屬效能讓列舉按照string的方式進行解析,如果不加這個的話,你看到的json中的列舉就是0,1,2這樣的數字

如果列舉也需要自定義名稱呢,這個時候我們就可以用enummember來解決。

[enummember(value = 「cli」)]加上這個特性以後,列舉就能按cli進行json序列化了,需要搭配jsonconverter(typeof(stringenumconverter))使用。

注:enummember是在system.runtime.serialization命名空間下,需要另外引入到專案中。

修改後的實體類如下:

class messageentity

[jsonproperty(propertyname = "msg")]

public string message

[jsonconverter(typeof(stringenumconverter))]

[jsonproperty(propertyname = "msg_type")]

public messagekind messagekind

[jsonproperty(propertyname = "pop_type")]

public popkind popkind

}[jsonconverter(typeof(stringenumconverter))]

enum messagekind

enum popkind

可以愉快的去解析json了,再給每個字段加上[system.reflection.obfuscation],就不用擔心混淆的問題了~

C 中自定義屬性的例子

自定義屬性的作用 有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方 資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。自定義屬...

C 中自定義屬性的例子

自定義屬性的作用 有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方 資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。自定義屬...

C 中自定義屬性的例子

自定義屬性的作用 有時候我們需要給乙個類或者類中的成員加上一些屬性或者附加資訊,讓類或者變數的功能更明確可控制的細粒度更高,打個簡單的比方 資料庫裡面的一張表,表中的每乙個欄位都有很多屬性,如是否主鍵,預設值,注釋資訊等等,我們在編寫實體類的時候,如何表示這些資訊呢?通過自定義屬性可以實現。自定義屬...