2012-06-08 78 views
0

我有一個鋸齒陣列的雙打,我需要將其轉換爲可以添加到xml文檔中的東西,然後再轉回鋸齒狀陣列。任何人都知道如何做到這一點?提前致謝。如何將鋸齒形雙數組轉換爲字符串並返回?

public double[][] Coordinates { get; set; } 

//For context this is how I'm creating the array 

//convert the geography column back in lat\long points 
for (var g = 1; g <= geography.STNumGeometries(); g++) 
{ 
    var geo = geography.STGeometryN(g); 
    var points = new List<double[]>(); 
    for (var i = 1; i <= geo.STNumPoints(); i++) 
    { 
     var point = new double[2]; 
     var sp = geography.STPointN(i); 
     // we can safely round the lat/long to 5 decimal places 
     // as thats 1.11m at equator, reduces data transfered to client 
     point[0] = Math.Round((double) sp.Lat, 5); 
     point[1] = Math.Round((double) sp.Long, 5); 
     points.Add(point); 
    } 

    transitLineSegment.Coordinates = points.ToArray(); 
} 
+0

你有什麼要求?應該是「XMLy」嗎?是整個陣列的一個字符串好嗎?它應該是人類可讀的嗎?結果的大小有多重要? – svick

+0

@svick不一定是XMLy。我更喜歡東西是一個字符串,因爲它將在另一個XML文檔中。沒有關係,如果它是人類可讀的。大小無關緊要。 – NullReference

回答

3

的LINQ(代碼註釋每建議修改)電源

var doubleAR = new List<List<Double>>() 
{ 
    new List<double>(){ 12.5, 12.6, 12.7 }, 
    new List<double>(){ .06 }, 
    new List<double>(){ 1.0, 2.0 } 
}; 

    var asXml = new XElement("Data", 
          doubleAR.Select(sList => new XElement("Doubles", sList.Select (sl => new XElement("Double", sl)))) 
          ); 

    Console.WriteLine (asXml); 
/* Output 
<Data> 
    <Doubles> 
    <Double>12.5</Double> 
    <Double>12.6</Double> 
    <Double>12.7</Double> 
    </Doubles> 
    <Doubles> 
    <Double>0.06</Double> 
    </Doubles> 
    <Doubles> 
    <Double>1</Double> 
    <Double>2</Double> 
    </Doubles> 
</Data> */ 

// Then back 
    List<List<Double>> asDoubleArray = 
     XDocument.Parse(asXml.ToString()) 
        .Descendants("Doubles") 
        .Select (eDL => eDL.Descendants("Double") 
            .Select (dl => (double) dl)) 
             .ToList()) 
        .ToList(); 
+1

我會擺脫整個第一個'選擇()'。它唯一改變的是代碼在某些文化設置下無法正常工作(例如,在我的電腦上它會產生' 12,0'')。 「XElement」的內容可以是「double」,它會正確處理格式。 – svick

+1

這同樣適用於您的XML解析代碼:您應該將整個元素轉換爲'double'('dl =>(double)dl'),它將獨立於區域設置工作(只要XML使用小數點)。 – svick

+0

@svick優秀的建議!代碼相應修改;我太專注於字符串,因此我沒有考慮到文化。 – OmegaMan

相關問題