0

我正在做客户端编程,我想将一个 javascript 对象转换为 c# 对象,以便我可以将它保存在数据库中。有什么方法可以实现吗?谢谢

4

3 回答 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.net

无论您决定使用哪种序列化/反序列化技术,您在这里必须克服的最大障碍是如何将 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 回答