Named pipes is a "low-level" transport, and it does not define how you should/could serialize/deserialize your data (it just transfers plain "data blocks", like byte[], or strings)
Probably what you are looking for is a serialization library, which would allow you to serialize an object in C# and deserialize it in C++, and vice versa.
Here is related question: Serialize in C++ then deserialize in C#?
So here is how it could go: You serialize your object in C# into a byte array/string, then write that array/string to a named pipe; then read the serialized data block from the named pipe in C++ application, and deserialize it into an C++ object. And vice versa.
The above post recommends google Protocol Buffers library for serialization/deserialization.