ここで「ハッキー」コードを作成しようとはしませんが、実際には最良のアプローチについては確信がありません。複雑なCSVフィールドのオブジェクトリストを作成
私の会社では、技術的ではないクライアントのデータソースとしてCSVを使用する新機能を採用していますが、大多数は非常に単純ですが、潜在的に落ちる可能性のあるいくつかのフィールドがあります。
名前| |色|サイズ|数量| RetailPrice |ネット|税務| |総ProductImage |ブランド| Custom_Field_1ID:
は、今の時点で私はのヘッダ値を持つフィールド "製品" を持っています| Custom_Field_2 | Custom_Field_3 | Custom_Field_4 | Custom_Field_5 | Custom_Field_6 | Custom_Field_7 | Custom_Field_8 | Custom_Field_9 | Custom_Field_10 | Custom_Field_11 | Custom_Field_12 | Custom_Field_13 | Custom_Field_14 | Custo m_Field_15 | Custom_Field_16 | Custom_Field_17 | Custom_Field_18 | Custom_Field_19 | Custom_Field_20
そして、この分野では、複数の製品を介して分離すべてを含めることができます "|"いくつかの予備テストの後、私は38個の値を持つストリングのコレクションを作成しました.38個の値はヘッダー値の個々のアイテムに対応しています。
フィールド値: 68977 |ララ||| 1 | 245.00 | 225 | 20.00 | 245.00 | /uploads/images/products/image_main/lara.jpg |バンドル MACLAREN |||||| |||||||||| 68978 |ガゼル||| 1 | 375.00 | 355 | 20.00 | 375.00 | /uploads/images/products/image_main/gazelle.jpg | Cara ミーハンロンドン|| |||||||||||||
ご覧のとおり、いくつかの値は「空」でもかまいませんが、ビアスプリットのブレークは少なくありません。
堅牢なコードブロックを作成するための最良の方法を見つけるのは本当に苦労しています。コードの
サンプルブロック:心にスプリング
public static List<Model.DataAPI.Product> ModelToCollection(CSVOrder source,
string shipment_id)
{
var collection = new List<Model.DataAPI.Product>();
if (!string.IsNullOrWhiteSpace(source.Products))
{
//ID|Name|Color|Size|Quantity|RetailPrice|Net|Tax|Total|ProductImage|Brand|Custom_Field_1|Custom_Field_2|Custom_Field_3|Custom_Field_4|Custom_Field_5|Custom_Field_6|Custom_Field_7|Custom_Field_8|Custom_Field_9|Custom_Field_10|Custom_Field_11|Custom_Field_12|Custom_Field_13|Custom_Field_14|Custom_Field_15|Custom_Field_16|Custom_Field_17|Custom_Field_18|Custom_Field_19|Custom_Field_20
var productStringValues = Strings.SplitString(source.Products, "|".ToCharArray());
var count = productStringValues.Count;
}
}
唯一のものは、38の倍数でコレクションを作成しているが、それは本当に「ハック」と感じています。
アイデア?感謝
、あなたはパイプ記号で区切られたデータ項目の1つの文字列として「製品」を取得しているように見えます
独自のCSV解析コードをロールしないでください。すでに多くの落とし穴を克服してきた多くの図書館があります。それらの1つを使用してください。 – hatchet
@hatchet私は完全に同意する、私は昨日CSVHelperを使い始めた。最終的には、CSVOrderのフラットオブジェクトを作成しました。これは、フィールドの性質上、製品の長い文字列を返します。フィールドに分割されていないので、複雑なオブジェクトを作成することはできません...文字通りフィールド内に「巨大な」文字列が1つあります。 –