One of the reasons that many people write their own is that CSV isn't quite so simple. For example:
- Does the first row contain field names, or not?
- Do you support dates? If, so, are they quoted, surrounded by # marks, in a certain day-month-year order?
- Does it support linefeeds that occur inside quoted text values? Or does that split the record?
- How do you escape a quote inside of a quoted string? Do you double the quote, or use a backslash or other escape character?
- What character encoding(s) are supported?
- How does it handle escaped control characters? &#XX; or \uXXXX or some other method?
These are some of the reasons people write their own parsers, because they're stuck reading files created with all these different settings. Or they write their own serializers, because the target system has a bunch of these idiosyncrasies.
If you don't care about these issues, just use the most convenient library. But understand they are there.