2

見て、私が一体何をしているのか教えてください;)

[HttpPost]
public ActionResult Upload(HttpPostedFileBase File)
{

    HttpPostedFileBase csvFile = Request.Files["adGroupCSV"];

    byte[] buffer = new byte[csvFile.ContentLength];
    csvFile.InputStream.Read(buffer, 0, csvFile.ContentLength);

    string csvString = System.Text.Encoding.UTF8.GetString(buffer);

    string[] lines = Regex.Split(csvString, "\r");
    List<string[]> csv = new List<string[]>();

    foreach (string line in lines)
    {
        csv.Add(line.Split(','));
    }

    string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(csv);

        ViewData["CSV"] = json;

        return View(ViewData);
}

これはそれがどのように出くわしているかです:

json = "[[\"Col1\",\"Col2\",\"Col3\",\"Col4\",\"Col5\",\"Col6\"],[\"test\",\"test\",\"test\",\"test\",\"http://www.test.com/\",\"test/\"],[\"test\",\"test\",\"test\",\"test\",\"http://www.test.com...

これが私が望む方法です:

{"Col1":"test","Col2":"test","Col3":"test","Col4":"test","Col5":"http://www.test.com/","Col6":"test/"}

これはCSVの例です

Col1,Col2,Col3,Col4,Col5,Col6
Test1,Test1,Test1,test1,test.test,test/
Test2,Test2,Test2,test2,test.test,test/
Test3,Test3,Test3,test3,test.test,test/
Test4,Test4,Test4,test4,test.test,test/
4

4 に答える 4

2

辞書が必要です。交換するだけ

List<string[]> csv = new List<string[]>();

foreach (string line in lines)
{
    csv.Add(line.Split(','));
}

var csv = lines.Select(l => l.Split(',')
                            .Select((s,i)=>new {s,i})
                            .ToDictionary(x=>"Col" + (x.i+1), x=>x.s));

それはうまくいくはずです...

編集

var lines = csvString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var cols = lines[0].Split(',');
var csv = lines.Skip(1)
               .Select(l => l.Split(',')
                             .Select((s, i) => new {s,i})
                             .ToDictionary(x=>cols[x.i],x=>x.s));

var json = new JavaScriptSerializer().Serialize(csv);
于 2013-03-18T18:37:20.623 に答える
2

すべての列をプロパティとして持つ1つのオブジェクトだけが必要な場合、文字列配列の配列があるように見えます。

あなたを築き上げるのではなく、

List<string[]> csv = new List<string[]>();

次のように、JSON から新しいオブジェクトを作成できますか。

public class UploadedFileObject
{
    public string Col1 { get; set; }
    public string Col2 { get; set; }
    public string Col3 { get; set; }
    public string Col4 { get; set; }
    public string Col5 { get; set; }
    public string Col6 { get; set; }
}





[HttpPost] public ActionResult Upload(HttpPostedFileBase File)
{

HttpPostedFileBase csvFile = Request.Files["adGroupCSV"];

byte[] buffer = new byte[csvFile.ContentLength];
csvFile.InputStream.Read(buffer, 0, csvFile.ContentLength);

string csvString = System.Text.Encoding.UTF8.GetString(buffer);

string[] lines = Regex.Split(csvString, "\r");
List<UploadedFileObject> returnObject = new List<UploadedFileObject>();

foreach (string line in lines)
{
    String[] lineParts = line.Split(',');
    UploadedFileObject lineObject = new UploadedFileObject();
    lineObject.Col1 = lineParts[0];
    lineObject.Col2 = lineParts[1];
    lineObject.Col3 = lineParts[2];
    lineObject.Col4 = lineParts[3];
    lineObject.Col5 = lineParts[4];
    lineObject.Col6 = lineParts[5];

    returnObject.add(lineObject);
}

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(returnObject);

    ViewData["CSV"] = json;

    return View(ViewData);
}
于 2013-03-18T18:26:00.743 に答える
1

前の回答に沿って、おそらく ServiceStack を使用して CSV をオブジェクトの配列に逆シリアル化し、次に ServiceStack の JSON シリアライザーを使用して再シリアル化できますか?

http://www.servicestack.net/docs/text-serializers/json-csv-jsv-serializers

于 2013-03-18T18:29:10.923 に答える
0

JavaScriptSerializerが期待する形式を使用していることを確認する必要があります。

あなたがそれに与えているので、List<string[]>それは次のようにフォーマットされています:

"[[list1Item1,list1Item2...],[list2Item1,list2Item2...]]"

ファイル内でrow1 -> list1などとして相関するもの.

ただし、必要なのは最初のリストの最初の項目であり、2 番目のリストの最初の項目と並んでいます。

の正確な動作についてはわかりませんが、データが 1 行 (合計 2 行) しかないと仮定して、 の代わりに を指定しJavaScriptSerializerてみてください。DictionaryList<string[]>

これには、最初の 2 行をキャッシュし、次のことを行う必要があります。

for (int i = 0; i < first.Length; i++)
{
    dict.Add(first[i],second[i]);
}
于 2013-03-18T18:29:05.913 に答える