I understand where you are coming from when it comes to the networking, but its still in construction so I still haven't finalized everything. As for the character data the only reason it comes out so big is because of nexons unnecessary use of 0's and other uselss amount of data. As for the nodes, the problem with C# is that you can't really seek out nodes in that way, it all depends on the library. From what I've been told and seen as well, that whole foreach nest of nodes is practically the only way of seeking things unless you use (wz.MainDirectory[...][...]) but that can only get you so far. C# can't convert things to whatever you want them to be like C++ can, there are restrictions and limitations.
Update: Optimized code due to your suggestion look @ Rev 0005 for more information or @ Github
Edit: For those who are knowledgeable in programming, and are wondering why I am constantly repeating certain fields in the layer classes and wonder why I haven't made a class that just handles that instead of the constant repeating. I am planning on it, I am just experimenting at the moment, since I just recently started this, so give me a bit of time and it'll happen. If you have noticed or not, since I posted this here, the code inside the Layer classes and everywhere else has been constantly changing for the better (or worse...depends) so yeah, just give me sometime.