2012-06-08 41 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

相关问题