2013-08-09 42 views
5

Tôi đang chuyển một chuỗi JSON đơn giản từ máy khách C# của tôi đến dịch vụ web của tôi. Sau đây là chuỗi tôi gửiKhông thể tạo đối tượng từ chuỗi JSON

"{\" tên \ ": \" S1 \ "}"

Vào cuối vụ tôi sử dụng đoạn mã sau

class DataDC 
{ 

    public String attr { get; set; } 
    public String attrVal { get; set; } 

} 

JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
DataDC dc = (DataDC)json_serializer.DeserializeObject(str); 

tôi nhận được lỗi sau

"Unable to cast đối tượng kiểu 'System.Collections.Generic.Dictionary`2 [System.String, System.Object] để gõ 'DataDC'."

+0

bạn nên đặt tên cho thuộc tính lớp học của mình như thuộc tính trong json – makim

+1

Trình gỡ lỗi json của bạn phải biết về đối tượng DataDC như thế nào để ánh xạ nó? – njzk2

Trả lời

20

nên không nó sẽ như thế này để deserialize đến lớp học của bạn:

JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
DataDC dc = json_serializer.Deserialize<DataDC>(str); 

Một điều nữa là bạn don có tham số Name trong lớp mô hình của bạn do đó không có gì sẽ được truyền cho nó. JSON của bạn nên được như thế này: "{\" attr \ ": \" một số giá trị \ "\ "attrVal \": \ "một số giá trị \"}"

Hoặc thay đổi lớp mô hình của bạn:

class DataDC { 
    public String name{ get; set; }  
} 
+0

Nó hoạt động ..thủ số –

+0

@sameer bạn có thể đề cập đến hai gợi ý nào giúp bạn (hoặc cả hai)? – elolos

+0

@elolos Cái đầu tiên –

0

Lý do bạn không thể deserialize nó là bởi vì nó không giống như tất cả các lớp học của bạn. Bạn nên tạo một lớp như thế này:

public class DataDC 
{ 
    public string name{get; set;} 
} 
1

chuỗi Json bạn/đối tượng không phù hợp với bất kỳ thuộc tính của DataDC

Để cho tiện làm việc, bạn sẽ ít nhất cần phải có một tài sản được gọi là tên trong lớp. ví dụ.

public class DataDC 
{ 

    public string name { get; set; } 
    public string attr { get; set; } 
    public string attrVal { get; set; } 

} 

Bằng cách này bạn có thể nhận được một thuộc tính phù hợp.

Đi với Lớp hiện tại của bạn, bạn sẽ cần chuỗi Json sau;

"{ \"attr\":\"S1\", \"attrVal\":\"V1\" }" 

Lưu ý: Bạn cũng có thể sử dụng mã sau để deserialize;

DataDC dc = json_serializer.Deserialize<DataDC>(str); 
+0

Tôi vẫn nhận được lỗi tương tự –

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