我正在做客户端编程,我想将一个 javascript 对象转换为 c# 对象,以便我可以将它保存在数据库中。有什么方法可以实现吗?谢谢
问问题
12179 次
3 回答
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 字符串存储到数据库
于 2012-11-21T15:56:01.287 回答
2
首先,您需要将 JSON 对象传递到服务器端,可能使用背后代码中的 Web 服务,然后您可以尝试这个很棒的库:
无论您决定使用哪种序列化/反序列化技术,您在这里必须克服的最大障碍是如何将 JSON 字符串从客户端传递到您可以使用它的代码后面。为此,我建议使用 jQuery 的 AJAX 功能。当我学习如何从客户那里传递信息时,这篇文章对我来说非常宝贵
于 2012-11-21T15:52:10.410 回答
-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);
}
于 2012-11-21T16:06:10.007 回答