Chuyển đổi chuỗi JSON thành đối tượng JSON c #


161

Tôi có Chuỗi này được lưu trữ trong cơ sở dữ liệu của tôi:

str = "{ "context_name": { "lower_bound": "value", "upper_bound": "value", "values": [ "value1", "valueN" ] } }"

Chuỗi này đã có định dạng JSON nhưng tôi muốn chuyển đổi nó thành Đối tượng JObject hoặc JSON.

JObject json = new JObject();

Tôi đã thử json = (JObject)str;diễn viên nhưng nó không hoạt động vì vậy làm thế nào tôi có thể làm điều đó?

Câu trả lời:


298

JObjectđịnh nghĩa phương thức Parsecho việc này:

JObject json = JObject.Parse(str);

Bạn có thể muốn tham khảo tài liệu Json.NET .


5
Điều này sẽ chuyển đổi thành {chuỗi}, sẽ thêm dấu ngoặc nhọn vào chuỗi của bạn.
Vasil Valchev

62

nếu bạn không muốn hoặc cần một đối tượng đánh máy, hãy thử:

using Newtonsoft.Json;
// ...   
dynamic json  = JsonConvert.DeserializeObject(str);

hoặc thử cho một đối tượng đánh máy thử:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)

Điều này cũng sẽ hoạt động với danh sách T nếu chuỗi json đến chứa bộ sưu tập: Danh sách <Foo> json = JsonConvert.DeserializeObject <Danh sách <Foo >> (str)
A. Varma

22

Những công việc này

    string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
    JavaScriptSerializer j = new JavaScriptSerializer();
    object a = j.Deserialize(str, typeof(object));

không gian tên cho 'JavaScriptSerializer': System.Web.Script.Serialization;
BernieSF

Chắc chắn làm việc cho tôi. Sử dụng JObject sau khi thay thế dấu ngoặc kép cho dấu ngoặc đơn, đã thực hiện thủ thuật. Cảm ơn!!!
Carlos Parra

System.Web.Script.Serialization chỉ khả dụng trong khung đầy đủ .Net.
norgie

7

có một cách thú vị để đạt được một mục tiêu khác đó là có một lớp cơ sở mạnh mẽ dựa trên json với một công cụ rất mạnh mẽ mà tôi đã sử dụng vài ngày trước để lần đầu tiên chuyển dịch kết quả giao dịch thành công

Là một công cụ đơn giản: sao chép dán nguồn json của bạn và trong vài giây, bạn sẽ có một lớp json được gõ mạnh định hướng . Theo cách này, bạn sẽ sử dụng các lớp này mạnh hơn và đơn giản hơn để sử dụng.

Tôi hy vọng điều đó có thể giúp bạn


Đúng thứ tôi cần! vì vậy tôi không thể định nghĩa một cấu trúc lớp phức tạp từ thứ gì đó được tạo trong javascript
NicolasZ

trong khi điều này không trả lời câu hỏi đây là một công cụ tiết kiệm thời gian lớn.
Valamas

7

Bạn có thể thử như sau:

string output = JsonConvert.SerializeObject(jsonStr);

1

Cái này hiệu quả với tôi JsonConvert

var result = JsonConvert.DeserializeObject<Class>(responseString);

0

Điều này không hoạt động trong trường hợp JObject, nó hoạt động với dữ liệu định dạng json đơn giản. Tôi đã thử dữ liệu của tôi về dữ liệu định dạng json dưới đây để khử lưu trữ trong loại nhưng không nhận được phản hồi.

Đối với Json này

{
  "Customer": {
    "id": "Shell",
    "Installations": [
      {
        "id": "Shell.Bangalore",
        "Stations": [
          {
            "id": "Shell.Bangalore.BTM",
            "Pumps": [
              {
                "id": "Shell.Bangalore.BTM.pump1"
              },
              {
                "id": "Shell.Bangalore.BTM.pump2"
              },
              {
                "id": "Shell.Bangalore.BTM.pump3"
              }
            ]
          },
          {
            "id": "Shell.Bangalore.Madiwala",
            "Pumps": [
              {
                "id": "Shell.Bangalore.Madiwala.pump4"
              },
              {
                "id": "Shell.Bangalore.Madiwala.pump5"
              }
            ]
          }
        ]
      }
    ]
  }
}

0

Nếu chuỗi JSon của bạn có "" trích dẫn kép thay vì một trích dẫn "và có \ n là chỉ báo của dòng tiếp theo thì bạn cần xóa chuỗi đó vì đó không phải là chuỗi JSon thích hợp, ví dụ như được hiển thị bên dưới:

            SomeClass dna = new SomeClass ();
            string response = wc.DownloadString(url);
            string strRemSlash = response.Replace("\"", "\'");
            string strRemNline = strRemSlash.Replace("\n", " ");
            // Time to desrialize it to convert it into an object class.
            dna = JsonConvert.DeserializeObject<SomeClass>(@strRemNline);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.