Добавление дополнительного свойства к корневому свойству объекта JSON из сериализованной строки.NET в веб-методе asmx

Предположим, мы сериализуем объект.NET класса "Вещи". Наше корневое свойство нашего объекта JSON - это "d", когда прокси получает ответ JSON. Есть ли способ добавить свойство к корневому свойству или одноуровневое свойство к объектам JSON из ASP.NET в веб-методе asmx? Прямо сейчас у меня есть хак.. Я помещаю значение в качестве дополнительного параметра в каждый объект 'Thing' в моем объекте JSON.

Класс вещи и код веб-службы ASP.NET:

namespace Web.Controls.ThingList
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class ThingListService : System.Web.Services.WebService
    {
        [Serializable]
        public class Thing
        {
            public string id;
            public string name;
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false, XmlSerializeString = false)]
        public List<Thing> GetThingList(string start, string limit)  //
        {
            return GetList("Thing", start, limit);
        }

    }
}

JSON-объект:

{
    "d": [{
        "__type": "Web.Controls.ThingList.ThingListService+Thing",
        "id": "1",
        "name": "ONE"
    }, {
        "__type": "Web.Controls.ThingList.ThingListService+Thing",
        "id": "2",
        "name": "TWO"
    }]
}

1 ответ

Решение

Вот как я это решил:

    reader: {
        type: 'json',
        model: 'Thing',
        totalProperty: 'd.recordCount',
        idProperty: 'id',
        root: 'd.resultSet'
    },


[Serializable]
public class ProxyResponse
{
    public string recordCount;
    public List<Thing> resultSet;
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false, XmlSerializeString = false)]
public ProxyResponse GetThingList(string start, string limit)  //
{
    ProxyResponse response = new ProxyResponse();

    List<Thing> list = GetList("Thing", start, limit);

    response.recordCount = list.Count.ToString();
    response.resultSet = list;

    return response;
}
Другие вопросы по тегам