Member 14938958 Ответов: 3

Не хочу, чтобы в моем ответе JSON были скобки [].


Используемые классы моделей:

public class Location    
    {
        public string id { get; set; } 
        public int area { get; set; } 
        public int region { get; set; } 
        
    }

public class Root 
    {
        public List<Location> locations { get; set; }
    }


Мой ответ JSON выглядит так:

[
    {
        "locations": [ // some data]
    }
]


Мне не нужны скобки [] в начале и конце ответа JSON, это не массив. Я вижу тот же вывод в браузере и почтальоне.

Что я уже пробовал:

Код контроллера для метода Get() :

// ControllerObject created here

public HttpResponseMessage Get()
        
        {
            

            HttpResponseMessage response = null;
            
            // call to SP
            
            if (reader.HasRows)
            {
                

                //ClassObj created here

		ClassObj.locations = new List<Location>();

                while (reader.Read())
                    {
                        // data added to list locations here
                        
                    }
                                 
                ControllerObject.Add(ClassObj);
                
               
                
                var jresp = JsonConvert.SerializeObject(ControllerObject, Formatting.Indented);
                
                response = Request.CreateResponse(HttpStatusCode.OK,"Success");
                response.Content = new StringContent(jresp, Encoding.UTF8, "application/json");

                return response;
            }
            else
            { 
                return Request.CreateResponse(HttpStatusCode.NotFound, response);
            }

        }

3 Ответов

Рейтинг:
7

F-ES Sitecore

ControllerObject.Add(ClassObj);

var jresp = JsonConvert.SerializeObject(ControllerObject, Formatting.Indented);


Вы преобразуете ControllerObject в JSON для возврата, и учитывая, что вы используете .Я предполагаю, что это список или какая-то другая коллекция, поэтому при преобразовании его в JSON вы получаете квадратные скобки, даже если в списке есть только один элемент. Если вы хотите вернуть только один элемент, то верните ClassObj, а не ControllerObject

var jresp = JsonConvert.SerializeObject(ClassObj, Formatting.Indented);


Или верните первый элемент в ControllerObject

var jresp = JsonConvert.SerializeObject(ControllerObject[0], Formatting.Indented);


Member 14938958

Даже если я не использую коллекцию/список, и мои классы похожи:

место открытый класс
{
public string id { get; set; }
public int area { get; set; }
public int region { get; set; }

}

корень публичного класса
{
адресам общественном месте { получить; набор; }
}


Я получаю JSON, как:

[

{
"пункты назначения":
{
// некоторые данные
}
}

] // Почему эти [] ?

Нужно убрать лишние квадратные скобки в начале и конце JSON-ответа.

F-ES Sitecore

Вы получаете внешние скобки, так как объект, который вы сериализуете, чтобы вернуть, является коллекцией (ControllerObject). Чтобы избавиться от скобок, верните один объект, например ControllerObject[0] или ClassObj, как я предложил выше.

Member 14938958

Вы правы. Я использовал объект класса для его разрешения. Спасибо!

Рейтинг:
0

OriginalGriff

Это "не массив", но это коллекция:

public class Root 
    {
        public List<Location> locations { get; set; }
    }
Поскольку JSON не имеет никаких конкретных разделителей для .NET collections, он использует маркеры массива для разграничения List<T> и так далее.

Если вы не хотите этого, не используйте коллекцию!


Member 14938958

Спасибо,
Каким должен быть мой класс, чтобы иметь такой вывод :
{
"местоположения": [ // некоторые данные]
}

Рейтинг:
0

Sandeep Mewara

Цитата:
var jresp = JsonConvert.SerializeObject(ControllerObject, форматирование.Изрезанный);

Не знаю, откуда (как) вы получаете данные в формате json здесь: ControllerObject
Теперь, если у вас есть контроль над ним, вы можете избежать передачи квадратных скобок в соответствии с вашими потребностями. Если нет, то смотрите ниже:

Цитата:
ответ.Content = new StringContent(jresp, Encoding.UTF8, "application/json");

Исходя из этого, кажется, что jresp-это строка. Проще всего было бы удалить квадратные скобки из строки:
jresp = jresp.substring(1, jresp.length-1);


Если бы данные json были в виде массива, то предложили бы взять jsonarray[0], чтобы получить нужные данные.