Я хочу записать строку в один столбец в файле .csv (Excel). Моя проблема в том, что строка записывается в несколько Columns.
Например, на этом снимке экрана у меня 20 столбцов.
GetMetadataCompleteResponse resultValue = null;
string jsonData = null;
await Task.Run(() =>
{
byte[] rawData = Convert.FromBase64String(responseContent);
jsonData = CompressUtil.Unzip(rawData);
});
resultValue = JsonConvert.DeserializeObject<GetMetadataCompleteResponse>(jsonData);
foreach(string a in resultValue.Value.Values)
{
foreal += a;
}
await Log.Info("callWebservice for " + strUrl + ", Result: " + objErrorDetails.Code + ", " + foreal);
редактировать
Я заметил, что новая колонка начинается после каждого ';' (точка с запятой). Я, наверное, могу просто заменить его чем-то другим.
@TheIncorrigible1 привет. Я совсем новичок в json. Что означает плоский json?
Я имею в виду, есть ли в вашем JSON вложенные объекты?
@nalnpir о да, это так.





Я думаю, у вас есть 2 проблемы. Первый — это то, как вы пишете свой CSV с помощью простой конкатенации строк. Без экранирования или двойных кавычек.
В Json будут запятые ,, которые будут разделителями в вашем CSV.
Чтобы создать действительный CSV, вы должны прочитать RFC 4180 и использовать соответствующую библиотеку для обработки сериализации.
Вот Минимальный, полный и проверяемый пример записи Json в столбце CSV.
using CsvHelper;
using CsvHelper.Configuration;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
public class Program
{
public static void Main()
{
var input = new Foo
{
Label = "My Foo",
Bars = new List<Bar> {
new Bar{Label = "Bar2"},
new Bar{Label = "Bar1"},
new Bar{Label = "Bar3"},
}
};
var json = JsonConvert.SerializeObject(input);
var myObject = new CsvObject
{
Label = "My CSV object",
FooString = json,
};
var result = "";
// Writing into a string instead of a file for debug purpuse.
using (var stream = new MemoryStream())
using (var reader = new StreamReader(stream))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer))
{
csv.Configuration.RegisterClassMap<CsvObjectMap>();
csv.WriteHeader<CsvObject>();
csv.NextRecord();
csv.WriteRecord(myObject);
csv.NextRecord();
writer.Flush();
stream.Position = 0;
result = reader.ReadToEnd();
}
Console.WriteLine(result);
}
private sealed class CsvObjectMap : ClassMap<CsvObject>
{
public CsvObjectMap()
{
Map( m => m.FooString );
Map( m => m.Label );
}
}
public class CsvObject
{
public string Label { get; set; }
public string FooString { get; set; }
}
public class Foo
{
public string Label { get; set; }
public List<Bar> Bars { get; set; }
}
public class Bar
{
public string Label { get; set; }
}
}
Живая демонстрация: https://dotnetfiddle.net/SNqZX1
В этом примере я использовал CsvHelper для сериализации CSV и Json.NET для сериализации Json. Обратите внимание, что запись CSV в файл — более простая задача, чем в строку, подобную этой пример.
Ваш json плоский? Если нет... CSV - это неправильный формат.