Как реализовать пользовательскую сериализацию JSON от веб-сервиса ASP.NET?

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

var filtered = [1, 2, 3, 4].filter(
  function(e) {
    return this.indexOf(e) < 0;
  },
  [2, 4]
);
13
задан Bobby Jack 10 October 2008 в 21:38
поделиться

5 ответов

Если Вы используете.NET 3.x (или может), сервис WCF будет Вашим лучшим выбором.

можно выборочно управлять, какие свойства сериализируются клиенту с [DataMember] атрибут. WCF также позволяет более мелкомодульное управление сериализацией JSON и десериализацией, если Вы требуете его.

Это - хороший пример для начала работы: http://blogs.msdn.com/kaevans/archive/2007/09/04/using-wcf-json-linq-and-ajax-passing-complex-types-to-wcf-services-with-json-encoding.aspx

1
ответ дан 2 December 2019 в 02:05
поделиться

Можно использовать System.Runtime.Serialization.Json. DataContractJsonSerializer класс в System.ServiceModel.Web.dll блок.

0
ответ дан 2 December 2019 в 02:05
поделиться

Не заключайте мне в кавычки на этой работе наверняка, но я полагаю, что это - то, что Вы ищете.

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public XmlDocument GetXmlDocument()
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(_xmlString);
    return xmlDoc;
}
0
ответ дан 2 December 2019 в 02:05
поделиться

If you don't use code-generated classes, you can decorate your properties with the ScriptIgnoreAttribute to tell the serializer to ignore certain properties. Xml serialization has a similar attribute.

Of course, you cannot use this approach if you want to return some properties of a class on one service method call and different properties of the same class on a different service method call. If you want to do that, return an anonymous type in the service method.

[WebMethod]
[ScriptMethod]
public object GimmieData()
{
    var dalEntity = dal.GimmieEntity(); //However yours works...

    return new
       {
           id = dalEntity.Id,
           description = dalEntity.Desc
       };

}

The serializer could care less about the type of the object you send to it, since it just turns it into text anyway.

I also believe that you could implement ISerializable on your data entity (as a partial class if you have code-gen'd data entities) to gain fine-grained control over the serialization process, but I haven't tried it.

2
ответ дан 2 December 2019 в 02:05
поделиться

Я знаю, что этот поток какое-то время был тихим, но я подумал, что предлагаю, чтобы, если вы переопределите свойство SupportedTypes JavaScriptConverter в своем настраиваемом конвертере, вы можете добавить типы, которые должны использовать конвертер. При необходимости это может быть внесено в файл конфигурации. Таким образом, вам не понадобится специальный конвертер для каждого класса.

Я пытался создать универсальный преобразователь, но не мог понять, как определить его в web.config. Хотелось бы узнать, удалось ли это кому-нибудь еще.

Я понял эту идею, когда пытался решить указанную выше проблему, и наткнулся на «Создание более точного сериализатора JSON .NET» Ника Берарди (погуглите).

Работает. для меня :)

Всем спасибо.

2
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

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