2013-09-25 90 views
7

JObject.Parse (jsonString) đang gây ra sự cố cho dữ liệu boolean. ví dụ. Các json là:Vấn đề phân tích cú pháp boolean Json.Net

{ 
    "BoolParam": true 
} 

tôi đã sử dụng đoạn mã sau để phân tích:

JObject data = JObject.Parse(str1); 
foreach (var x in data) 
{ 
    string name = x.Key; 
    Console.Write(name + " ("); 
    JToken value = x.Value; 
    Console.Write(value.Type + ")\n"); 
    Console.WriteLine(value); 
} 

in này ra giá trị như: BoolParam (Boolean): Đúng

trường hợp các nguyên nhân nhạy cảm vấn đề khi tôi lưu json này để sử dụng sau này. Các json lưu trông giống như

{ 
    "BoolParam": True 
} 

Tuy nhiên, khi sau đó tôi sử dụng nó, JObject.Parse (str) throws lỗi là không hợp lệ Json: nhân vật bất ngờ gặp phải trong khi phân tích giá trị: T. Path 'BoolParam', dòng 2, vị trí 15.

Nếu tôi thay đổi trường hợp từ "True" thành "true", nó hoạt động. Tôi không muốn thêm hack này để thay đổi trường hợp khi tiết kiệm nhưng là có một cách tốt hơn để xử lý kịch bản này.

Trả lời

5

Tôi không muốn thêm hack này để thay đổi trường hợp khi lưu nhưng là có cách tốt hơn để xử lý trường hợp này.

Không, bạn phải tạo JSON hợp lệ khi lưu nếu bạn muốn có thể sau đó deserialize nó với một serializer JSON như Newtonsoft JSON. Vì vậy, sửa chữa định tuyến tiết kiệm của bạn là đúng cách để đi ở đây.

+0

Tôi hiểu rằng tôi sẽ phải lưu một json hợp lệ. Điều gây ra vấn đề là khi tôi phân tích tôi nhận được giá trị là "Đúng" nhưng chuỗi Json hợp lệ mong đợi "đúng". Vì vậy, tự hỏi là có một cách để phân tích nó là "true" – surya

+1

@ surya Nếu JSON của bạn chứa 'True' thì nó không phải là JSON hợp lệ; Nó đơn giản như vậy. Mã thông báo 'true' PHẢI là tất cả các chữ thường. Xem phần 2.1 của [JSON spec] (http://www.ietf.org/rfc/rfc4627.txt?number=4627). Như Darin đã nói, bạn cần sửa cách bạn đang lưu JSON nếu bạn mong đợi một trình phân tích cú pháp có thể đọc chính xác nó. –

+1

Tôi đã thêm bản sửa lỗi nhưng tôi nghĩ rằng tôi đã thất bại trong việc giải thích trước đó .. Không phải tôi, người đang thay đổi giá trị boolean thành "True" nhưng phân tích cú pháp Json.net. cụ thể dòng này trả về "True" cho giá trị boolean: JToken value = x.Value; string val = (value.ToString()); Các json là {"Bool": "true"} – surya

Các vấn đề liên quan