クライアント側のプログラミングに取り組んでおり、javascriptオブジェクトをc#オブジェクトに変換して、データベースに保存できるようにしたいと考えています。これを達成する方法はありますか?ありがとう
3 に答える
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文字列をデータベースに保存できます
まず、コードビハインドでWebサービスを使用して、JSONオブジェクトをサーバー側に渡す必要があります。次に、このすばらしいライブラリを試すことができます。
使用するシリアル化/逆シリアル化の手法に関係なく、ここで克服しなければならない最大のハードルは、JSON文字列をクライアント側からコードの背後にあるコードに渡す方法です。このために、jQueryのAJAX機能を使用することをお勧めします。私がクライアントから情報を渡す方法を学んでいたとき、この記事は私にとって非常に貴重であることがわかりました
このソリューションを機能させるには、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);
}