Вы можете использовать TypeReference
. Test
невозможно в Java
.
TypeReference testStringType = new TypeReference>() { };
Object value = mapper.readValue(json, testStringType);
Также работает:
JavaType javaType = mapper.getTypeFactory().constructParametricType(Test.class, String.class);
Test value1 = mapper.readValue(json, javaType);
См. Также:
Да, можно.
Один из способов сделать это - использовать параметр командной строки, скажем, «/ console», чтобы отличать версию консоли от версии, выполняемой в качестве службы:
// Class that represents the Service version of your app
public class serviceSample : ServiceBase
{
protected override void OnStart(string[] args)
{
// Run the service version here
// NOTE: If you're task is long running as is with most
// services you should be invoking it on Worker Thread
// !!! don't take too long in this function !!!
base.OnStart(args);
}
protected override void OnStop()
{
// stop service code goes here
base.OnStop();
}
}
...
Затем в Program.cs:
static class Program
{
// The main entry point for the application.
static void Main(string[] args)
{
ServiceBase[] ServicesToRun;
if ((args.Length > 0) && (args[0] == "/console"))
{
// Run the console version here
}
else
{
ServicesToRun = new ServiceBase[] { new serviceSample () };
ServiceBase.Run(ServicesToRun);
}
}
}
Лучший способ сделать это с точки зрения дизайна - это реализовать все свои функциональные возможности в проекте библиотеки и создать вокруг него отдельные проекты-оболочки, чтобы они выполнялись так, как вы хотите (то есть служба Windows, программа командной строки, веб-сервис asp.net, сервис wcf и т. д.)
Да, это так? может быть сделано.
Ваш класс запуска должен расширять ServiceBase.
Вы можете использовать статический метод запуска void Main (string [] args) для анализа переключателя командной строки для запуска в режиме консоли.
Что-то вроде:
static void Main(string[] args)
{
if ( args == "blah")
{
MyService();
}
else
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
Служба Windows сильно отличается от обычной программы Windows; Вам лучше не пытаться делать две вещи одновременно.
Рассматривали ли вы сделать это вместо запланированной задачи?