Microsoft's product to help migrate Java apps to .NET is JUMP:
Translating Java code to C# code is not especially difficult, provided
you have a managed library which implements all the Java API calls you
use; then simply translating the syntax suffices, with special
provisions for some features found in Java but not C#. Octopus, one of
the best commercial translation products, does something like this:
However, translating Java in this manner yields, essentially, a Java
program written in C#, which frankly hardly seems worthwhile.
Translating Java code to idiomatic, typical C# code is a much more
difficult process, because a real C# program would use .NET library
calls, which, as Nicholas explained, have no useful general mapping to
Java API calls, and also has a number of stylistic and algorithmic
differences that are difficult or even unfeasible to map.
Rather than translate Java to C#, a better approach may be to
use a tool such as IKVM to allow your Java classes to be accessed
directly from other C# code through the .NET Framework: