我正在进行客户端编程,我想将javascript对象转换为c#对象,以便将其保存在数据库中。 有没有办法实现这个目标? 感谢
答案 0 :(得分: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字符串存储到数据库
答案 1 :(得分:2)
首先,您需要将JSON对象传递给服务器端,可能使用后面的代码中的Web服务,然后您可以尝试这个非常棒的库:
无论您决定使用什么序列化/反序列化技术,您必须克服的最大障碍是如何将JSON字符串从客户端传递到您可以使用的代码后面它。为此,我建议使用jQuery的AJAX功能。当我学习如何从客户端传递信息时,This article对我来说非常宝贵
答案 2 :(得分:-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);
}