Dot-Net
通用 WCF JSON 反序列化
我對 WCF 有點陌生,並將嘗試清楚地描述我正在嘗試做的事情。
我有一個使用 JSON 請求的 WCF 網路服務。在大多數情況下,我在發送/接收 JSON 方面做得很好。例如,以下程式碼執行良好且符合預期。
發送的 JSON:
{ "guy": {"FirstName":"Dave"} }周轉基金:
[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; }這將按預期返回一個帶有“Dave”的 JSON 對象。問題是我不能總是保證我收到的 JSON 將與我的 DataContract 中的成員完全匹配。例如,JSON:
{ "guy": {"firstname":"Dave"} }由於大小寫不匹配,將無法正確序列化。guy.FirstName 將為空。這種行為是有道理的,但我真的不知道如何解決這個問題。我是否必須在客戶端強制使用欄位名稱,還是有辦法在伺服器端進行協調?
一個可能相關的問題:我可以接受通用 JSON 對象並將其序列化為 StringDictionary 或某種簡單的鍵值結構嗎?所以無論在 JSON 中發送什麼欄位名稱,我都可以訪問已發送給我的名稱和值嗎?現在,我可以讀取我收到的數據的唯一方法是它是否與預定義的 DataContract 完全匹配。
這是將 json 讀入字典的另一種方法:
[DataContract] public class Contract { [DataMember] public JsonDictionary Registration { get; set; } } [Serializable] public class JsonDictionary : ISerializable { private Dictionary<string, object> m_entries; public JsonDictionary() { m_entries = new Dictionary<string, object>(); } public IEnumerable<KeyValuePair<string, object>> Entries { get { return m_entries; } } protected JsonDictionary(SerializationInfo info, StreamingContext context) { m_entries = new Dictionary<string, object>(); foreach (var entry in info) { m_entries.Add(entry.Name, entry.Value); } } public void GetObjectData(SerializationInfo info, StreamingContext context) { foreach (var entry in m_entries) { info.AddValue(entry.Key, entry.Value); } } }