反序列化数据最佳实践

时间:2013-04-16 18:08:24

标签: c# .net c#-4.0 serialization deserialization

我被赋予了反序列化某些数据的任务。数据全部被编入一个字符串,格式如下:

InternalNameA8ValueDisplay NameA¬InternalNameB8ValueDisplay NameB¬等等。

(即,它有一个内部名称,'8',值,显示名称,后跟'¬'**)。例如,你有FirstName8JoeFirst Name¬

我无法控制这些数据是如何序列化的,它是传统的东西。

我曾经想过在字符串上做一堆拆分,或者把它分解成一个char数组并按照这种方式拆分文本。但这似乎很可怕。这种方式太多可能出错(例如,如果电话号码的值(例如),可以以'8'开头。

我想知道的是人们对此的看法是什么?我能做些什么来打破数据

注意:'¬'实际上不是角色,它看起来更像是指向左侧的箭头。但此刻我离开了我的机器。卫生署!

感谢。

1 个答案:

答案 0 :(得分:1)

我建议使用简单的状态机,而不是使用拆分。走过每个角色,直到你达到分界符,然后你知道你在下一个领域。这会解决电话号码中的“8”等问题。

注意 - 未经测试的代码。

var fieldValues = new string[3];
var currentField = 0;
var line = "InternalNameA8ValueDisplay NameA¬InternalNameB8ValueDisplay NameB¬";

foreach (var c in line)
{
    if (c == '8' && currentField == 0)
    {
        currentField++; continue;
    }

    if (c == '¬')
    {
        currentField++; continue;
    }

    fieldValues[currentField] += c;
}

处理不稳定的格式 - 总是很开心!

祝你好运, 埃里克