簡體   English   中英

序列化嵌套json c#

[英]serializing nested json c#

長期致歉。 我需要創建以下json格式,以便在c#中發布api。 以下調用有效,並且我已經在Postman中成功使用了將其添加到目標系統中。

{
"item": {
    "attrs": {
        "attr": [{
                "name": "IP_Category",
                "value": "Miscellaneous"
            }, {
                "name": "Description",
                "value": "Picture of Rabbit"
            }, {
                "name": "Title",
                "value": "A Rabbit"
            }
        ]
    },
    "resrs": {
        "res": [{
                "filename": "Rabbit.jpg",
                "base64": "/9j/4AAQSkZJR"
            }
        ]
    },
    "acl": {
        "name": "Submitter"
        },
       "entityName": "IP_Document"
    }
}

根據我已經完成的研究,我需要將其復制並“粘貼特殊”到Visual Studio中的新類文件中,以便它可以基於json格式創建類對象(非常酷!)。 這就是它創建的:

namespace BasicWebApp
{

public class Rootobject
{
    public Item item { get; set; }
}

public class Item
{
    public Attrs attrs { get; set; }
    public Resrs resrs { get; set; }
    public Acl acl { get; set; }
    public string entityName { get; set; }
}

public class Attrs
{
    public Attr[] attr { get; set; }
}

public class Attr
{
    public string name { get; set; }
    public string value { get; set; }
}

public class Resrs
{
    public Re[] res { get; set; }
}

public class Re
{
    public string filename { get; set; }
    public string base64 { get; set; }
}

public class Acl
{
    public string name { get; set; }
}
}

問題1:為什么vs將res json對象重命名為Re類? 它是C#中的保留字嗎?

問題2:我知道我必須以這種方式嵌套事物,但是我有兩個層次,不確定要編碼什么?

var model = new Rootobject();
model.item = new Item
{
    attrs = new Attrs
    {
        attr = new List<Attr>
            {
                 **now what??**
            }
    }
}

尚無第一個問題的答案(但正在尋找):

對於第二個問題, 現在您只需要做什么:

new Attr(){ name = "name1", value = "value1" },
new Attr(){ name = "name1", value = "value2" }

但這不是我的建議。 我建議您准備好Attr集合,然后進行分配。 喜歡:

var model = new Rootobject();
model.item = new Item
{
    attrs = yourAttrCollection
}

它也適用於您所做的所有其他事情。 准備好您的東西,然后分配它們。 它提高了嵌套對象的可讀性。

問題1:為什么vs將res json對象重命名為Re類? 它是C#中的保留字嗎?

No Re不是課堂上的保留字。 正如提將軍所說

res是re的復數

您可以使用JsonProperty屬性來解決此問題,例如

public class Resrs
{
    [JsonProperty("res")]
    public Re[] res { get; set; }
}

問題2:我知道我必須以這種方式嵌套事物,但是我有兩個層次,不確定要編碼什么?

var model = new Rootobject();
model.item = new Item
{
    attrs = new Attrs
    {
        attr = new List<Attr>
            {
                 new Attr { name = "abc", value = "ABC" },
                 new Attr { name = "pqr", value = "PQR" }
            }
    }
}

感謝所有回應。 它有幫助。 我最終使用以下代碼創建了所需的json對象。

var model = new RootObject();
            model.item = new Item
            {
                attrs = new Attrs
                {
                    attr = new List<Attr>
                {
                    new Attr { name = "IP_Category", value = ddlContent.Text },
                    new Attr { name = "Description", value = txtDesc.Text },
                    new Attr { name = "Title", value = txtTitle.Text }
                }
                },
                resrs = new Resrs
                {
                    res = new List<Re>
                {
                    new Re { filename = fName, base64 = base64string},
                }
                },
                acl = new Acl
                {
                    name = "Submitter"
                },
                entityName = "IP_Document"
            };

暫無
暫無

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

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