簡體   English   中英

如何解析Json到C#中的類(Windows Phone 8)?

[英]How to parse Json to class in c# (Windows phone 8)?

也許有人知道更好的版本可以解決我的問題?

有下一個json:

[  
   {  
      "name":{  
         "IsEmpty":false,
         "X":-10.5,
         "Y":2.47
      },
      "password":"pas"
   },
   {  
      "name":{  
         "IsEmpty":false,
         "X":-10.5,
         "Y":2.47
      },
      "password":"pas"
   },
   {  
      "name":{  
         "IsEmpty":false,
         "X":-10.5,
         "Y":2.47
      },
      "password":"pas"
   }
]

我想將json中的元素解析到我的類中:

 public class Name
    {
        public bool IsEmpty { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
    }

    public class RootObject
    {
        public List<Name> name { get; set; }
        public string password { get; set; }
    }  

......

    dynamic res = JsonConvert.DeserializeObject<RootObject[]>(result1);

變量result1是我的json對象。

還有我所擁有的:

無法將當前JSON對象(例如{“ name”:“ value”})反序列化為類型'client_app.MainPage + RootObject []',因為該類型需要JSON數組(例如[1,2,3])才能正確反序列化。 要解決此錯誤,可以將JSON更改為JSON數組(例如[1,2,3]),也可以更改反序列化類型,使其成為普通的.NET類型(例如,不像整數這樣的原始類型,也不像這樣的集合類型。數組或列表),可以從JSON對象反序列化。 還可以將JsonObjectAttribute添加到類型中,以強制其從JSON對象反序列化。 路徑“名稱”,第1行,位置8。

問題出在您的JSon字符串和根對象之間的映射上。 我認為這是導致問題的原因:

"IsEmpty":false

反序列化對象時,JSon轉換器會等待IsEmpty屬性的類型為bool 情況並非如此,因為其類型為List

因此,您的根類應如下所示:

     public class RootObject
     {
        public Name name { get; set; }
        public string password { get; set; }
     }  

請嘗試這樣:

 var res = JsonConvert.DeserializeObject<List<RootObject>>(result1);

這是您需要反序列化的類集

public class Name
{
    public bool IsEmpty { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
}

public class Item
{
    public Name name { get; set; }
    public string password { get; set; }
}

然后

var items = Newtonsoft.Json.JsonConvert.DeserializeObject<Item[]>(json);
var ds = new DataContractJsonSerializer(typeof(RootObject[]));
                var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
                RootObject[] items = (RootObject[])ds.ReadObject(msnew);    

這解決了我的問題

您的Name類具有IsEmpty作為bools列表的屬性。

所以您傑森應該是:

[
{
    "name": {
        "IsEmpty": [
            false
        ],
        "X": -10.5,
        "Y": 2.47
    },
    "password": "pas"
},
{
    "name": {
        "IsEmpty": [
            false
        ],
        "X": -10.5,
        "Y": 2.47
    },
    "password": "pas"
},
{
    "name": {
        "IsEmpty": [
            false
        ],
        "X": -10.5,
        "Y": 2.47
    },
    "password": "pas"
}

]

注意IsEmpty值上的方括號,表示該值在集合中。 如果要分配多個值,則可以使用以下方法添加更多值:

"IsEmpty": [ false, true ]

暫無
暫無

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

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