将javascript对象转换为c#对象

时间:2012-11-21 15:51:04

标签: c# javascript

我正在进行客户端编程,我想将javascript对象转换为c#对象,以便将其保存在数据库中。 有没有办法实现这个目标? 感谢

3 个答案:

答案 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.net

无论您决定使用什么序列化/反序列化技术,您必须克服的最大障碍是如何将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);
    }