首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JSON对象转换为自定义的C#对象?

如何将JSON对象转换为自定义的C#对象?
EN

Stack Overflow用户
提问于 2010-02-12 02:30:37
回答 11查看 735.7K关注 0票数 272

有没有一种简单的方法可以用通过AJAX传递的C#对象填充我的JSON对象?

这是使用JSON.stringify从页面传递到C# WEBMETHOD的JSON对象

代码语言:javascript
复制
{
    "user": {
        "name": "asdf",
        "teamname": "b",
        "email": "c",
        "players": ["1", "2"]
    }
}

接收JSON对象的C# WebMetod

代码语言:javascript
复制
[WebMethod]
public static void SaveTeam(Object user)
{

}

表示传入到WebMethod的C#对象的对象结构的JSON类

代码语言:javascript
复制
public class User
{
    public string name { get; set; }
    public string teamname { get; set; }
    public string email { get; set; }
    public Array players { get; set; }
}
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-02-12 02:33:36

在C#中使用JSON的一个好方法是使用JSON.NET

来自JSON.NET - Official siteQuick Starts & API Documentation可以帮助您使用它。

下面是如何使用它的示例:

代码语言:javascript
复制
public class User
{
    public User(string json)
    {
        JObject jObject = JObject.Parse(json);
        JToken jUser = jObject["user"];
        name = (string) jUser["name"];
        teamname = (string) jUser["teamname"];
        email = (string) jUser["email"];
        players = jUser["players"].ToArray();
    }

    public string name { get; set; }
    public string teamname { get; set; }
    public string email { get; set; }
    public Array players { get; set; }
}

// Use
private void Run()
{
    string json = @"{""user"":{""name"":""asdf"",""teamname"":""b"",""email"":""c"",""players"":[""1"",""2""]}}";
    User user = new User(json);

    Console.WriteLine("Name : " + user.name);
    Console.WriteLine("Teamname : " + user.teamname);
    Console.WriteLine("Email : " + user.email);
    Console.WriteLine("Players:");

    foreach (var player in user.players)
        Console.WriteLine(player);
 }
票数 232
EN

Stack Overflow用户

发布于 2010-02-12 02:39:31

如果您使用的是.NET 3.5或更高版本,为了保留您的选择,这里有一个打包的示例,您可以使用泛型直接从框架中使用它。正如其他人所提到的,如果不仅仅是简单的对象,那么您应该真正使用JSON.net。

代码语言:javascript
复制
public static string Serialize<T>(T obj)
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    MemoryStream ms = new MemoryStream();
    serializer.WriteObject(ms, obj);
    string retVal = Encoding.UTF8.GetString(ms.ToArray());
    return retVal;
}

public static T Deserialize<T>(string json)
{
    T obj = Activator.CreateInstance<T>();
    MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    obj = (T)serializer.ReadObject(ms);
    ms.Close();
    return obj;
}

您需要:

代码语言:javascript
复制
using System.Runtime.Serialization;

using System.Runtime.Serialization.Json;
票数 96
EN

Stack Overflow用户

发布于 2010-02-12 02:38:12

给出您的代码示例,您应该不需要执行其他任何操作。

如果将JSON字符串传递给web方法,它将自动解析JSON字符串,并创建一个填充用户对象作为SaveTeam方法的参数。

一般来说,您可以像下面这样使用JavascriptSerializer类,或者为了获得更大的灵活性,可以使用任何一种Json框架(Jayrock就是一个很好的框架)来方便地操作JSON。

代码语言:javascript
复制
 JavaScriptSerializer jss= new JavaScriptSerializer();
 User user = jss.Deserialize<User>(jsonResponse); 
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2246694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档