我對WCF有點新,並且會試圖清楚地描述我正在嘗試做什麼。通用WCF JSON反序列化
我有一個使用JSON請求WCF web服務。我在大部分時間裏都很好地發送/接收JSON。例如,下面的代碼運行良好,並且如預期的那樣。
JSON發送:
{ "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;
}
這將返回一個JSON對象與預期 「戴夫」。問題是我不能始終保證我收到的JSON將與我的DataContract中的成員完全匹配。例如,JSON:
{ "guy": {"firstname":"Dave"} }
由於大小寫不匹配而無法正確序列化。 guy.FirstName將爲空。這種行爲是有道理的,但我真的不知道如何解決這個問題。我必須強制客戶端上的字段名稱還是有辦法在服務器端協調?
一個可能相關的問題:我可以接受和序列化的通用JSON對象爲StringDictionary或某種簡單的鍵值結構的?因此,無論JSON中發送的字段名稱是什麼,我都可以訪問已發送給我的名稱和值?現在,我可以讀取我收到的數據的唯一方式是它是否與預定義的DataContract完全匹配。
*當然*你可以保證的JSON是符合的合同。只有當你不能控制客戶時,你才能控制它。如果您沒有客戶端的控制權,那麼它可能超出了您的服務範圍,這一點是沒有意義的。我沒有看到問題。我看到的所有解決方法都是徒勞的,只會增加痛苦。閱讀DataContract/DataMember上的規格並遵循它們。 2比索。 –
你說得對。從技術上講,我可以在發送信息之前將它寫入JS。而且,我暗示了另一個評論,這可能是我最終會做的。儘管如此,我希望服務能夠處理任意數量的不必預先知道的字段。那有意義嗎?我只想要一個服務,可以接受完全任意的「密鑰」列表:「值」對,然後決定如何處理它們,而不必事先知道「密鑰」名稱。 – davidmdem