2016-06-14 6 views
-1

Привет Я пытаюсь загрузить ответ Json на Sql Server. Но Json может быть string или object.Deserializing JSON, когда иногда строка и иногда объект C#

Вот пример, когда это string:

{ 
"result": [ 
    { 
     "upon_approval": "proceed", 
     "location": { 
      "link": "https://satellite.service-now.com/api/now/table/cmn_location/4a2cf91b13f2de00322dd4a76144b090", 
      "value": "4a2cf91b13f2de00322dd4a76144b090" 
     }}]} 

Вот пример того, когда это класс object

{ 
    "result": [ 
     { 
      "upon_approval": "proceed", 
      "location": ""}]} 

И мой C# это как

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace incident 
{ 

    public class Location 
    { 
     public string link { get; set; } 
     public string value { get; set; } 
    } 

    public class Result 
    { 
     public Location location { get; set; } 
    } 

    public class RootObject 
    { 
     public List<Result> result { get; set; } 
    } 
} 

Я использую Newtonsoft.Json. Есть простой способ сделать это?

+0

У вас нет проблем с кодом. 'Result.Location' будет null, если в' JSON' есть пустая строка. Не будет проблем с десериализацией. Какой у Вас вопрос? – niksofteng

+0

Это бросает мне эту ошибку «Невозможно преобразовать объект типа« System.String », чтобы набрать« инцидент.Location »на этом этапе в C# при отладке JavaScriptSerializer ser = new JavaScriptSerializer(); ser.MaxJsonLength = 2147483647; RootObject ro = ser.Deserialize (responseValue); –

+0

Это бросает мне эту ошибку «Невозможно преобразовать объект типа« System.String », чтобы набрать« инцидент. Место »на этом этапе в C# при отладке JavaScriptSerializer ser = new JavaScriptSerializer(); ser.MaxJsonLength = 2147483647; RootObject ro = ser.Deserialize (responseValue); think2cecode1ce –

ответ

1

Если посылается как пустая строка, то объект расположение будет нулевым, поэтому пример с использованием C# 6 может быть что-то вроде:

var location = new Location 
{ 
    Link = _request.Location?.Link, 
    Value = _request.Location?.Value 
} 
+0

Благодарим вас за ответ. Да, это пустое значение. Код, который вы написали, я не могу понять ia m new для .net, можете ли вы добавить, что в коде C# я написал в вопросе @chandler –

+0

да , можете ли вы добавить раздел, в котором вы запрашиваете запрос на C#? @chaitanyadasari – chandler

0
It is throwing me this error "Cannot convert object of type 'System.String' to type 'incident.Location" at this step in c# while debugging  JavaScriptSerializer ser = new JavaScriptSerializer(); 
      ser.MaxJsonLength = 2147483647; 
      RootObject ro = ser.Deserialize<RootObject>(responseValue); @think2cecode1ce 
1

Я не очень понимаю проблему у вас есть, так что ваш код, кажется, хорошо, но если вы просто хотите, чтобы проверить, если ваш ответ является объектом или просто строка, попытайтесь просто получить его тип, как:

if(yourResponse.GetType() == typeof(object) && yourResponse !=null) 
{ 
    //In this case, it's an Object, do the required treatment here 
} 
else if { yourResponse.GetType() == typeof(String) && yourResponse !=null && yourResponse != string.Empty) { 

    //In this case, it's a string, do the required treatment here 

} 

конечно, вы можете добавить условия сделать особый fic, если ваш ответ равен нулю.