varunvv Ответов: 1

Как преобразовать тип объекта в тип объекта класса C#


Я diongбыл пример проекта с API-интерфейса REST.. В моем методе POST Я передаю объект stringify с url-адресом. мой параметр для действия-object. Чтобы преобразовать эти данные объекта в другой объект моего класса .. мой пример кода приведен ниже

новый_пользователь-объект

формат JSON
$.ajax({
    type: "POST",
    url: "values/InsertUserDetails",
    dataType: "json",
    data: JSON.stringify(newuser),
    contentType: "application/json; charset=utf-8",
     
    error: function (error) {
        alert("TEST !!!");
    }
});


Код C#


public int InsertUserDetails([FromBody]object datatosave)
       {
                
                MdlUser objuser = (MdlUser) (datatosave);
                return SettingManager.InsertUserDetails(objuser);
         } 

Bernhard Hiller

? И твой вопрос ... ?

1 Ответов

Рейтинг:
6

Sergey Alexandrovich Kryukov

Вопрос о "Новообращенном" не имеет никакого литературного смысла. Объект Javascript-это одно, объект .NET-совсем другое; они никогда не встречались вместе; один-это клиентская сторона, другой-серверная. (Предполагая, что вы используете ASP.NET потому что — что же еще?) Более того, вы не "передаете объект stringify".

Однако вопрос, по сути, имеет смысл; речь идет о десериализации JSON в .NET.

Вы отправляете sting в своем HTTP-запросе, который представляет собой строковое представление newuser в синтаксисе Ajax (Javascript).
Когда ваш серверный код получит запрос, вам нужно будет десериализовать эту строку JSON. Вы можете использовать System.Web.Script.Serialization.JavaScriptSerializer:
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer%28v=vs.110%29.aspx[^].

Каждый из методов JavaScriptSerializer пытается десериализовать строку JSON в объект .NET. Пожалуйста, смотрите примеры кода для получения более подробной информации. Смотрите также этот пример:
http://dailydotnettips.com/2013/09/26/sending-raw-json-request-to-asp-net-from-jquery[^].
Ключевая фраза на этой странице звучит так: "чтобы разобрать запрос json, вам нужно разобрать его самостоятельно." Однако это не совсем так. Вы можете разумно "угадать" ожидаемый тип объекта .NET; тогда десериализация с помощью этого сериализатора будет успешной (см. мой пример кода, демонстрирующий его, второй).

Более подробная информация зависит от типа newuser и о том, что вы хотите сделать с этим на стороне сервера. Давайте рассмотрим простой пример:

using Serializer = System.Web.Script.Serialization.JavaScriptSerializer; 
// (reference assembly System.Web.Extensions

// ...

string jsArray = @"[1,""false"",false]";
string jsDictionary = @"{""x"": 5}";
Serializer serializer = new Serializer();
object array = serializer.DeserializeObject(jsArray);
object dictionary = serializer.DeserializeObject(jsDictionary);

Чтобы понять, как входные строки были получены из JSON, см.:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify[^].

Теперь осмотрите объекты array и dictionary. Если ты позвонишь GetType() на них вы увидите, что один из них представляет собой массив System.Object и еще один-это словарь объектов, а "x" - это строковый ключ. Такие объекты слишком универсальны, поэтому вы можете попытаться разобрать их на некоторые именованные типы. Таким образом, Вы сможете получить доступ к экземплярам некоторых именованных типов и их членам. Давайте перепишем предыдущий пример кода именно таким "типизированным" способом:
using Serializer = System.Web.Script.Serialization.JavaScriptSerializer;
using IntDictionary = System.Collections.Generic.Dictionary<string, int>;

// ...

string jsArray = @"[1,""false"",false]";
string jsDictionary = @"{""x"": 5}";
Serializer serializer = new Serializer();
object[] typedArray = serializer.Deserialize&lt;object[]>(jsArray);
IntDictionary typedDictionary = serializer.Deserialize<IntDictionary>(jsDictionary);

Теперь вы можете использовать экземпляры явно определенных типов object[] и <cod>IntDictionary и фактически получить доступ к членам экземпляра экземпляров typedArray и typedDictionary.

—СА


[no name]

+