簡體   English   中英

如何使用C#反序列化此json?

[英]How can I de-serialize this json with C#?

使用C#,我嘗試不反序列化此json內容:

{
    "code":200,
    "message":"OK",
    "name":"The name",
    "description":"The description",
    "tags":{
        "0.1.3":{
            "date":"2015-03-11",
            "author":"SOMEONE",
        },
        "0.1.2":{
            "date":"2015-03-11",
            "author":"SOMEONE",
        }
    }
}

您已經注意到,這里有一個“標簽”對象列表,但是我沒有表格。

目標課程的開始:

[DataContract]
public class Project
{
    [DataMember]
    public int code { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string description { get; set; }

    [DataMember]
        **How can I handle tags entries ?**
}

[DataContract]
public class Tag
{
    [DataMember]
    public string date { get; set; }

    [DataMember]
    public string author { get; set; }
}

如果使用的是JSON.NET,則可以具有以下內容:

[DataContract]
public class Project
{
    [DataMember]
    public int code { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string description { get; set; }

    [DataMember]
    public Dictionary<string, Tag> tags { get; set; }
}

[DataContract]
public class Tag
{
    [DataMember]
    public string date { get; set; }

    [DataMember]
    public string author { get; set; }
}

然后,您將使用以下方式(假設responseString包含您的JSON):

Project project = JsonConvert.DeserializeObject<Project>(responseString);

foreach (KeyValuePair<string, Tag> tag in project.tags)
{
    Debug.WriteLine("Version: {0}", tag.Key);
    Debug.WriteLine("Date: {0}", tag.Value.date);
    Debug.WriteLine("Author: {0}", tag.Value.author);
}

根據RFC 4627(JSON規范),JSON輸入有效。

http://www.freeformatter.com/json-validator.html

JSON結構基於鍵值對。 正確的JSON格式如下:

{
"object":{
    "DataMember1":"String content",
    "DataMember2":"String content",
    "DataMember3":"String content"
},
"object2":{
    "DataMember1":"String content",
    "DataMember2":"String content"
}

}

轉到基礎

要檢查您的json結構,您可以從此處進行驗證

嗯,我能夠反序列化:

Newtonsoft.Json.JsonConvert.DeserializeObject<Project>(json);

但是,這是我的類定義:

 public class Project
{

    public string code { get; set; }

    public string message { get; set; }

    public string name { get; set; }

    public string description { get; set; }

    public Dictionary<string,Tag> tags { get; set; }
}


public class Tag
{

    public string date { get; set; }

    public string author { get; set; }
}

感謝Arturo TorresSánchez。 要獲取“標簽”條目,聲明必須為:

[DataContract]
public class Project
{
    [DataMember]
    public int code { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string description { get; set; }
    [DataMember]
    public Dictionary<string, Tag> tags { get; set; }
}

最重要的是,在創建DataContractJsonSerializer實例時,必須修改默認設置並使用新設置。

DataContractJsonSerializerSettings settings = 
            new DataContractJsonSerializerSettings();
settings.UseSimpleDictionaryFormat = true;

DataContractJsonSerializer serializer = 
            new DataContractJsonSerializer(typeof(Project), settings);

Project results = (Project)serializer.ReadObject(ms);

沒有設置。UseSimpleDictionaryFormat = true; 標簽的對象計數為0。

暫無
暫無

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

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