[C#] JSON 객체를 커스텀 C # 객체로 변환하는 방법?

C # 객체를 AJAX를 통해 전달 된 JSON 객체로 채우는 쉬운 방법이 있습니까?

JSON을 사용하여 페이지에서 C # WEBMETHOD로 전달 된 JSON 객체입니다.

{
    "user": {
        "name": "asdf",
        "teamname": "b",
        "email": "c",
        "players": ["1", "2"]
    }
}

JSON 객체를 수신하는 C # WebMetod

[WebMethod]
public static void SaveTeam(Object user)
{

}

WebMethod에 전달 된 JSON 객체의 객체 구조를 나타내는 C # 클래스

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



답변

C #에서 JSON을 사용하는 좋은 방법은 JSON.NET입니다.

빠른 시작 및 API 문서 에서 JSON.NET – 공식 사이트 도움 당신은 그것으로 작동합니다.

사용 방법의 예 :

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);
 }


답변

우리는 모두 하나의 라이너 코드를 좋아하기 때문에

Newtonsoft는 자바 스크립트 시리얼 라이저보다 빠릅니다. … 이것은 Newtonsoft NuGet 패키지에 의존하는데, 이것은 기본 시리얼 라이저보다 널리 사용됩니다.

우리가 수업을 가지고 있다면 아래에서 사용하십시오.

Mycustomclassname oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<Mycustomclassname>(jsonString);

수업이 없으면 동적을 사용하십시오.

var oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);


답변

.NET 3.5 이상을 사용하는 경우 옵션을 열어 두려면 Generics를 사용하여 프레임 워크에서 바로 사용할 수있는 예제가 있습니다. 다른 사람들이 언급했듯이 단순한 객체가 아니라면 실제로 JSON.net을 사용해야합니다.

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;
}

너는 필요할거야:

using System.Runtime.Serialization;

using System.Runtime.Serialization.Json;


답변

코드 샘플이 주어지면 다른 작업을 수행 할 필요가 없습니다.

해당 JSON 문자열을 웹 메소드에 전달하면 JSON 문자열이 자동으로 구문 분석되고 채워진 User 오브젝트가 SaveTeam 메소드의 매개 변수로 작성됩니다.

일반적 JavascriptSerializer으로 아래 클래스를 사용 하거나 유연성을 높이기 위해 JSON 조작을 쉽게하기 위해 다양한 Json 프레임 워크 (Jayrock JSON이 좋습니다)를 사용하십시오.

 JavaScriptSerializer jss= new JavaScriptSerializer();
 User user = jss.Deserialize<User>(jsonResponse); 


답변

또 다른 정말 간단한 솔루션은 Newtonsoft.Json 라이브러리를 사용하는 것입니다.

User user = JsonConvert.DeserializeObject<User>(jsonString);


답변

다음 두 예제는 다음 중 하나를 사용합니다.

  1. System.Web.Script.Serialization 아래의 JavaScriptSerializer 또는
  2. System.Web.Helpers 아래의 Json.Decode

예 1 : System.Web.Script.Serialization 사용

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Script.Serialization;

namespace Tests
{
    [TestClass]
    public class JsonTests
    {
        [TestMethod]
        public void Test()
        {
            var json = "{\"user\":{\"name\":\"asdf\",\"teamname\":\"b\",\"email\":\"c\",\"players\":[\"1\",\"2\"]}}";
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            dynamic jsonObject = serializer.Deserialize<dynamic>(json);

            dynamic x = jsonObject["user"]; // result is Dictionary<string,object> user with fields name, teamname, email and players with their values
            x = jsonObject["user"]["name"]; // result is asdf
            x = jsonObject["user"]["players"]; // result is object[] players with its values
        }
    }
}

사용법 : JSON 객체에서 사용자 정의 C # 객체

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Script.Serialization;
using System.Linq;

namespace Tests
{
    [TestClass]
    public class JsonTests
    {
        [TestMethod]
        public void TestJavaScriptSerializer()
        {
            var 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);
        }
    }

    public class User {
        public User(string json) {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            var jsonObject = serializer.Deserialize<dynamic>(json);
            name = (string)jsonObject["user"]["name"];
            teamname = (string)jsonObject["user"]["teamname"];
            email = (string)jsonObject["user"]["email"];
            players = jsonObject["user"]["players"];
        }

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

예 2 : System.Web.Helpers 사용

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Helpers;

namespace Tests
{
    [TestClass]
    public class JsonTests
    {
        [TestMethod]
        public void TestJsonDecode()
        {
            var json = "{\"user\":{\"name\":\"asdf\",\"teamname\":\"b\",\"email\":\"c\",\"players\":[\"1\",\"2\"]}}";
            dynamic jsonObject = Json.Decode(json);

            dynamic x = jsonObject.user; // result is dynamic json object user with fields name, teamname, email and players with their values
            x = jsonObject.user.name; // result is asdf
            x = jsonObject.user.players; // result is dynamic json array players with its values
        }
    }
}

사용법 : JSON 객체에서 사용자 정의 C # 객체

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Helpers;
using System.Linq;

namespace Tests
{
    [TestClass]
    public class JsonTests
    {
        [TestMethod]
        public void TestJsonDecode()
        {
            var 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);
        }
    }

    public class User {
        public User(string json) {
            var jsonObject = Json.Decode(json);
            name = (string)jsonObject.user.name;
            teamname = (string)jsonObject.user.teamname;
            email = (string)jsonObject.user.email;
            players = (DynamicJsonArray) jsonObject.user.players;
        }

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

이 코드에는 System.Web.Helpers 네임 스페이스를 추가해야합니다.

% ProgramFiles % \ Microsoft ASP.NET \ ASP.NET 웹 페이지 {VERSION} \ Assemblies \ System.Web.Helpers.dll

또는

% ProgramFiles (x86) % \ Microsoft ASP.NET \ ASP.NET 웹 페이지 {VERSION} \ Assemblies \ System.Web.Helpers.dll

도움이 되었기를 바랍니다!


답변

public static class Utilities
{
    public static T Deserialize<T>(string jsonString)
    {
        using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            return (T)serializer.ReadObject(ms);
        }
    }
}

자세한 정보는 다음 링크를 참조하십시오
http://ishareidea.blogspot.in/2012/05/json-conversion.html

정보를 DataContractJsonSerializer Class읽고 있습니다 여기에 .