Как Преобразовать объект JSON в Пользовательский объект C#?

Существует ли простой способ заполнить мой Объект C# с объектом JSON, переданным через Ajax?

Это - Объект JSON, переданный C# WEBMETHOD от страницы с помощью JSON.stringify

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

C# WebMetod, Который получает Объект JSON

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

}

Класс C#, который представляет структуру объекта Объекта JSON, передал в WebMethod

public class User
{
    public string name { get; set; }
    public string teamname { get; set; }
    public string email { get; set; }
    public Array players { get; set; }
}
230
задан aloisdg says Reinstate Monica 8 April 2019 в 22:16
поделиться

4 ответа

Хороший способ использовать JSON в C # - это 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);
 }
209
ответ дан 23 November 2019 в 03:37
поделиться

JSON.Net - лучший выбор, но, в зависимости от формы объектов и наличия круговых зависимостей, вы можете использовать JavaScriptSerializer или DataContractSerializer.

1
ответ дан 23 November 2019 в 03:37
поделиться

Чтобы варианты оставались открытыми, если вы используете .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;
95
ответ дан 23 November 2019 в 03:37
поделиться

Учитывая ваш пример кода, вам не нужно делать ничего другого.

Если вы передадите эту строку JSON в ваш веб-метод, он автоматически разберет строку JSON и создаст заполненный объект User в качестве параметра для вашего метода SaveTeam.

В целом, вы можете использовать класс JavascriptSerializer, как показано ниже, или для большей гибкости использовать любой из различных Json-фреймворков (Jayrock JSON - хороший) для простого манипулирования JSON.

 JavaScriptSerializer jss= new JavaScriptSerializer();
 User user = jss.Deserialize<User>(jsonResponse); 
53
ответ дан 23 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: