Просто столкнулся с той же проблемой. (похоже, вы используете более новый Джексон, чем я, но все равно должны работать)
Что вам нужно, так это
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>your version</version>
</dependency>
Но добавления зависимости недостаточно. Вам также необходимо зарегистрировать класс com.fasterxml.jackson.datatype.guava.GuavaModule.GuavaModule в ObjectMapper.
Я подозреваю, что из вашего примера кода вы используете какую-то инфраструктуру. Я не могу помочь с этим.
Но если я построю ObjectMapper и все программно, это будет выглядеть так:
ObjectMapper mapperWithGuavaSupport = new ObjectMapper().registerModule(new GuavaModule())
MyObjectContainsImmutableMap obj = mapperWithGuavaSupport.readValue("theJsonString", MyObjectContainsImmutableMap.class);
Надеюсь, что это по крайней мере даст вам подсказку в направлении ... Удачи!
Подробно останавливаясь на ответе Harper Shelby, да, это может быть сделано, но это обычно - запах кода, чтобы сделать так в.NET.
Для получения адреса переменной в C# можно использовать указатель C-стиля (*) / адрес (и) / разыменовывают (->) синтаксис. Чтобы сделать это, необходимо будет скомпилировать приложение с / небезопасным переключателем компилятора, поскольку Вы возвращаетесь из системы поддержки управляемого кода, как только Вы начинаете иметь дело с адресами памяти непосредственно.
Образец от MSDN рассказывает большую часть истории:
int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());
Это присваивает адрес number
переменная к pointer-to-an-int p
.
Существуют некоторые выгоды к этому:
fixed
прикрепить переменную в RAM.int* p = &GetSomeInt();
)Обычно мой совет в этом мире состоит в том, чтобы серьезно рассмотреть, почему Вы думаете, что необходимо сделать это в мире.NET. Одна из миссий.NET состояла в том, чтобы экранировать разработчиков от хождения вразрез с металлом, и эта функция в противоречии с той миссией. Это существует для тех (редких) сценариев, где это необходимо; если Вы используете несерьезно это просто, потому что Вы можете, Вы, вероятно, неправильно использовать его и представить запах кода.
Избегайте его, если это возможно, но знайте, как использовать его, если Вы абсолютно должны.
C# имеет специальный синтаксис для присвоения функций делегатам/событиям. Просто используйте <delegate> += <function>;
Если Вы на самом деле пытаетесь получить адрес для некоторого другого использования, Вам не повезло. Одна из вещей об управляемом коде - то, что эти адреса не обязательно фиксируются. В то время как было бы маловероятно, что большинство функций будет когда-либо изменяться существуют обстоятельства, где это возможно.
По-видимому, это может быть сделано (хотя я не уверен, где Вам был бы нужен он). Вот страница MSDN.
EventHandler handler1 = this.button1_Click;
EventHandler handler2 = new EventHandler( this.button1_Click );
...
...
...
void button1_Click( object sender, EventArgs e ){
// ....
}
Обе нотации эквивалентны.