簡體   English   中英

使用數組中的空值反序列化JSON

[英]Deserialize JSON with null values in array

我有以下JSON數組,該數組還可以保存var數組中某些元素的空值。 var數組中的元素始終是固定的。

 "vars": [
        {
            "varCol": [
                {
                    "visible": false, 
                    "val": 1, 
                }, 
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                null
            ],
            "Type": "Type1"
            "UniqueId": "ID1"
        }, 
          {
            "varCol": [
                {
                    "visible": true, 
                    "val": 1, 
                }, 
                null,
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                null
            ],
            "Type": "Type2", 
            "UniqueId": "ID2"
        } 
        ]

我有以下C#反序列化器類:

public class Var
{
    public int VarId { get; set; }
    public string Type { get; set; }
    public List<VarCol> VarCols { get; set; }
}
public class VarCol
{
    public int VarColId { get; set; }
    public bool Visible { get; set; }
    public float Val { get; set; }
}

我想要的輸出是在VarCol中有一個條目,該條目始終保持數組中值的固定結構。 在這種情況下,每個vars元素在varCol數組中有4個條目。 對於JSON的反序列化,我正在使用:

Var v = JToken.Parse(json_string).ToObject<Var>();

我想插入此內容作為注釋,但是它太長了,因此我必須將其發布為答案。

請注意逗號,因為您的JSON無效。 我想您想要這樣的東西:

    {
    "vars": [
        {
            "varCol": [
                {
                    "visible": false,
                    "val": 1
                },
                {
                    "visible": false,
                    "val": 5
                },
                {
                    "visible": false,
                    "val": 5
                },
                null
            ],
            "Type": "Type1",
            "UniqueId": "ID1"
        },
        {
            "varCol": [
                {
                    "visible": true,
                    "val": 1
                },
                null,
                {
                    "visible": false,
                    "val": 5
                },
                null
            ],
            "Type": "Type2",
            "UniqueId": "ID2"
        }
    ]
}

祝你今天愉快,

阿爾貝托

不確定您要實現什么,因為JToken.Parse()處理null值的方式與其他任何對象值的方式幾乎相同,因此varCol將始終具有4個元素。

這是一些測試代碼: http : //dotnetfiddle.net/9gGdH9

抱歉,我的問題有誤導性。 我面臨的問題是通過Entity Framework將Var集合中的空VarCol保存到數據庫。 因為我有一個固定的大小列表,所以我需要這個才能知道集合中的哪個元素為空,我通過用一個空的VarCol實例化null VarCol來解決此問題,Alex Skalozub在他的評論之一中也指出了這一點:

這取決於對象在數據庫中的存儲方式。 如果VarCol與Var具有多對一關系,EF可能會將對Var記錄的引用存儲在VarCol表中。 但是無法將空記錄保存到數據庫。 這就是為什么回讀將僅帶來那些已保存的記錄的原因。 在保存到數據庫之前,解析JSON后可能需要進行一些后處理,以將空值替換為空記錄。 – Alex Skalozub 5小時前

暫無
暫無

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

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