2012-11-21 383 views

回答

5

的javascript:

var obj = {id:0,userName:'Bill'}; 

C#, 定義類:

public class myClass 
{ 
    public int id; 
    public string userName; 
} 

然後運OBJ到服務器(例如使用AJAX請求)和反序列化,當您需要使用對象時

myClass obj = (new JavascriptSerializer()).Deserialize<myClass>(objJson); 

但是你可以不反序列化和存儲objJson字符串做數據庫

+0

要使用它,他必須首先學習如何將JSON字符串傳遞給服務器端 –

2

首先,你需要將JSON對象傳遞給服務器端可能使用代碼Web服務後面,那麼你可以試試這個真棒庫:

JSON.net

最大的障礙你」無論您決定使用哪種序列化/反序列化技術,都必須在這裏克服,就是您將如何將JSON字符串從客戶端傳遞到您可以使用它的代碼。爲此,我建議使用jQuery的AJAX功能。 This article證明無價的對我,當我正在學習如何從客戶端傳遞信息

+0

.NET內置JSON序列化/反序列化,不需要第三方庫。添加System.Web.Extensions,你可以在System.Web.Script.Serialization.JavaScriptSerializer找到它。 – Matt

+0

是的,但Json.NET公開了很多其他非常有用的功能,比如LINQ to JSON。誠然,如果他只是直接轉換到現有的類,這將工作得很好,但我認爲這是值得一提的 –

+0

JavascriptSeriaizer(以我的經驗)幾乎不像DataContractJsonSerializer那樣健壯。在DataContractJsonSerializer存在之前,我會推薦類似JSON.net的東西,但現在不行了。 – mckeejm

-1

對於這個解決方案工作,你需要用T表示類型爲裝飾有DataContract和DataMember屬性的類型。 DataContractJsonSErializer比JavascriptSerializer更好。這是來自我爲C#REST客戶端編寫的一些代碼。它確實展示瞭如何一般序列化和反序列化。包含的示例對象

[DataContract] 
public SampleObject 
{ 
    [DataMember("MyProperty")] 
    public string MyProperty {get;set;} 
} 

    private static byte[] SerializeRequest<T>(string contentType, T request) 
    { 
     using (MemoryStream requestObjectStream = new MemoryStream()) 
     { 
      if (contentType == "applicaton/json") 
      { 
       DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); 
       serializer.WriteObject(requestObjectStream, request); 
      } 
      else if (contentType == "application/xml") 
      { 
       DataContractSerializer serializer = new DataContractSerializer(typeof(T)); 
       serializer.WriteObject(requestObjectStream, request); 
      } 
      else 
      { 
       throw new Exception("invalid contentType"); 
      } 
      requestObjectStream.Position = 0; 

      return requestObjectStream.ToArray(); 
     } 
    } 

    private static T DeserializeResponse<T>(string acceptHeader, string responseString) 
    {    
     if (acceptHeader == "applicaton/json") 
     { 
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); 
      MemoryStream responseObjectStream = new MemoryStream(Encoding.UTF8.GetBytes(responseString)); 
      return (T)serializer.ReadObject(responseObjectStream); 
     } 
     else if (acceptHeader == "application/xml") 
     { 
      DataContractSerializer serializer = new DataContractSerializer(typeof(T)); 
      MemoryStream responseObjectStream = new MemoryStream(Encoding.UTF8.GetBytes(responseString)); 
      return (T)serializer.ReadObject(responseObjectStream); 
     } 

     return default(T); 
    }