Как избежать последней запятой при реализации коллекции ToString - PullRequest
0 голосов
/ 22 июня 2011

Я реализую метод настройки toJson ().

Один из моих учеников - словарь.

Я сделал:

        sb.Append("\"DateSource\" : {");
        foreach (var row in DateSource)
        {
            sb.Append("[");
            sb.Append(string.Format("\"RowKey\" : {0}", row.Key));
            sb.Append(string.Format("\"RowData\" : {0}", row.Value));
            sb.Append("]");
        }
        sb.Append("}");

Как мне избежать последней запятой в конвертации?

Ответы [ 4 ]

6 голосов
/ 22 июня 2011

Вы можете использовать:

sb.Append("[");
sb.Append(string.Join(
    ", ",
    DateSource.Select(r => string.Format("\"RowKey\" : {0}, \"RowData\" : {1}", r.Key, r.Value))));
sb.Append("]");
4 голосов
/ 22 июня 2011

Я использую следующее расширение:

    public static String ToSeparatedString<T>(this IEnumerable<T> source, String separator)
    {
        return String.Join(separator, source.Select(e => e.ToString()).ToArray());
    }

В случае, когда вам нужно получить что-то отформатированное:

    public static String ToSeparatedString<T>(this IEnumerable<T> source, String separator, String format)
    {
        return String.Join(separator, source.Select(e => String.Format(format, e)).ToArray());
    }

Пример использования

    var myList = new List<String> {"a", "b", "c"};
    String result = myList.ToSeparatedString(",", "[{0}]");
    // result is "[a],[b],[c]" here
1 голос
/ 22 июня 2011
    sb.Append("\"DateSource\" : {");
    string separator = string.Empty;
    foreach (var row in DateSource)
    {
        sb.Append(separator);
        sb.Append("[");
        sb.Append(string.Format("\"RowKey\" : {0},", row.Key));
        sb.Append(string.Format("\"RowData\" : {0}", row.Value));
        sb.Append("]");
        separator = ",";
    }
    sb.Append("}");

Примите во внимание, что если row.Key и / или row.Value представляют строки, вам необходимо применить следующий формат

        sb.Append(string.Format("\"RowKey\" : \"{0}\"", row.Key));
        sb.Append(string.Format("\"RowData\" : \"{0}\"", row.Value));

Обратите внимание \"{0}\"

0 голосов
/ 22 июня 2011

Я думаю, что я просто буду использовать String.replace () для замены каждого

, ] --> ] 
, } --> }
...