簡體   English   中英

使用jsonconvert.serializeobject時如何使用特定字段作為json對象的名稱?

[英]How to use a specific field as the name of a json object when using jsonconvert.serializeobject?

所以我當前來自serializeobject的輸出是:

{
"ID": "dog-1",
"fed": [
  "2016/05/19T01:00:00Z"
]
},

“ ID”是我要序列化的對象中的字符串,“ fed”是字符串列表。

我的問題是,我可以使用某種屬性來代替它嗎?

"dog-1" :  {
"fed": [
  "2016/05/19T01:00:00Z"
]
},

我正在使用newtonsoft JsonConvert.SerializeObject

簡短的回答:不,你不能

您正在序列化一個對象,這是將其結構轉換為描述其屬性和值的字符串。

但是,您可以標識要序列化的結構,將對象從其原始結構遷移到所需的結構,然后序列化。

在您的示例中,您有一個看起來像這樣的對象:

class yourObject {
  public string ID;
  public Date fed;
}

但是您想要序列化為更像字典的東西,該字典穩定了字符串和Date之間的直接關系。

也許您可以創建類似於以下內容的東西:

class yourOtherObject {
    public Date fed;
}

並以如下方式加載原始對象:

yourObject originalData = new yourObject("dog-1", "2016/05/19T01:00:00Z");
yourOtherObject originalDataDate = new yourOtherObject();
originalDataDate.fed = originalData.fed;
KeyValuePair<string, yourOtherObject> serializableData = new KeyValuePair<string, yourOtherObject>(originalData.ID, originalDataDate);

現在,如果序列化serializableData ,則應獲得所需的結果。 只需將想法封裝到一個類中,創建臨時的構造函數和方法,即可將數據從yourObject傳輸到此類,再從該類傳輸到yourObject,則可以獲取翻譯。

另一個選擇是添加一個方法,使特定的序列化進入yourObject類,但是從長遠來看,這往往會花費更多的工作。

找到了可用的解決方案。

var x = new  List<MyClass>();
JsonConvert.SerializeObject(x.ToDictionary(x => x.ID));

這將創建一個Json列表,每個對象如下所示:

"dog" : {
    "myList" : [
        "mystring",
        "mysecondstring"
    ]
}

帶有如下所示的對象列表:

object.ID == "dog"
object.myList == ["mystring", "mysecondstring"] //is a List<string>

暫無
暫無

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

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