Tôi là một chút mới với WCF và sẽ cố gắng mô tả rõ ràng những gì tôi đang cố gắng làm.Generic WCF JSON Deserialization
Tôi có một dịch vụ web WCF sử dụng các yêu cầu JSON. Tôi đang làm tốt gửi/nhận JSON cho hầu hết các phần. Ví dụ, mã sau hoạt động tốt và như mong đợi.
JSON gửi:
{ "guy": {"FirstName":"Dave"} }
WCF:
[DataContract]
public class SomeGuy
{
[DataMember]
public string FirstName { get; set; }
}
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public string Register(SomeGuy guy)
{
return guy.FirstName;
}
này trả về một đối tượng JSON với "Dave" như mong đợi. Vấn đề là tôi không thể luôn đảm bảo rằng JSON tôi nhận được sẽ khớp chính xác với các thành viên trong DataContract của tôi. Ví dụ: JSON:
{ "guy": {"firstname":"Dave"} }
sẽ không tuần tự chính xác vì trường hợp không khớp. guy.FirstName sẽ rỗng. Hành vi này có ý nghĩa, nhưng tôi không thực sự biết cách để giải quyết vấn đề này. Tôi có phải ép buộc tên trường trên máy khách hoặc có cách nào tôi có thể hòa giải ở phía máy chủ không?
Một câu hỏi có thể có liên quan: Tôi có thể chấp nhận và tuần tự hóa một đối tượng JSON chung vào một StringDictionary hoặc một loại cấu trúc giá trị khóa đơn giản nào đó không? Vì vậy, không có vấn đề gì tên trường được gửi trong JSON, tôi có thể truy cập tên và giá trị đã được gửi cho tôi? Ngay bây giờ, cách duy nhất tôi có thể đọc dữ liệu tôi nhận được là nếu nó khớp chính xác với DataContract được xác định trước.
* Tất nhiên * bạn có thể đảm bảo rằng các json là tuân thủ QTI hợp đồng.Chỉ khi bạn không có quyền kiểm soát của khách hàng, bạn có thể không kiểm soát được nó. Nếu bạn không có quyền kiểm soát của khách hàng thì nó có lẽ nằm ngoài miền của dịch vụ của bạn và điểm là tranh luận. Tôi không thấy vấn đề. Tất cả các cách giải quyết tôi thấy là vô ích và sẽ chỉ thêm đau đớn. Đọc thông số kỹ thuật trên DataContract/DataMember và theo dõi chúng. 2 peso. –
Bạn nói đúng. Về mặt kỹ thuật, tôi có thể viết nó vào JS trước khi thông tin được gửi đi. Và, tôi gợi ý trong một bình luận khác rằng đây có lẽ là những gì tôi sẽ làm cuối cùng. Mặc dù, tôi muốn một dịch vụ có thể xử lý một số trường tùy ý mà không nhất thiết phải biết trước. Điều đó có ý nghĩa? Tôi chỉ muốn một dịch vụ có thể chấp nhận một danh sách hoàn toàn tùy ý của các cặp "key": "value" và sau đó quyết định làm gì với chúng mà không cần phải biết trước tên "key". – davidmdem