2014-03-24 81 views
1

我想知道是否有人可以帮助我一个类可以采取任何类型的例子,并将其序列化为字符串像JSON或分隔符字符串,并回到它的原始类型。文本文件中的配置设置是一行值,带有分隔符。一种方法来反序列化和序列化对象的静态类

例如,我有一个对象或类是一个配置设置。所以,当读取config/text文件中的一行时,我想将其序列化为一个ConfigurationSetting对象。任何帮助将不胜感激,并提前致谢!我曾与JSOn见过,但找不到它的参考,所以忘记了它是如何处理的。

这里是配置文件的一个例子:

线形成其计算方法如下:ZZZVISA *** |帕布克斯VISA MAIN.PDF | LITERAL | TRUE

因此,这是不可能的,因为我没有带有值的属性名称,.net知道如何处理它?

+0

请不要包含关于问题标题中使用的语言的信息,除非在没有它的情况下没有意义。标签用于此目的。 –

回答

1

你可以使用类似JSON.Net的东西来序列化你的对象到/从JSON。

文档中的Basic Reading and Writing页面显示了如何从.NET对象读取和写入JSON。


如果你只是想打破了分隔的信息,并建立它,你可能还需要考虑使用String.SplitString.Join。这些方法允许您将分隔文本分解为数组,然后将数组重新加入到分隔文本中。

+0

尽管它们不是JSON格式。这是一个被删除的文本文件。这是可能的,还是不可以? – Casey

+0

它会不工作,因为我需要从每个值的属性名称,以便能够序列化它? – Casey

+0

@Casey你只是想使用string.Split然后? –

0

您可以使用string.format以该格式序列化数据。要反序列化它,你可以使用RegEx将它分成组。我有一些课程用于解析来自串行连接设备的线路。我的Parser类如下所示,它接受一个正则表达式字符串并可以返回强类型的结果。

例如

 var sp = new Parser("# (d+) VO(d+) SP(d+)\\+"); 
     int a, b, c; 
     bool ok = sp.Parse<int, int, int>("# 123 VO256 SP256+", out a, out b, out c); 

/// <summary> 
/// A strongly typed parse result containing up to 10 elements, each individually strongly typed 
/// </summary> 
public class Parser 
{ 
    Regex regex; 
    public Parser(string regularExpression) 
    { 
     this.regex = new Regex(regularExpression, RegexOptions.Compiled); 
    } 

    public bool Parse<T>(string input, out T value1) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2>(string input, out T1 value1, out T2 value2) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3>(string input, out T1 value1, out T2 value2, out T3 value3) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5, T6>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5, out T6 value6) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     ok = Assign(match, 6, out value6) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5, T6, T7>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5, out T6 value6, out T7 value7) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     ok = Assign(match, 6, out value6) && ok; 
     ok = Assign(match, 7, out value7) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5, T6, T7, T8>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5, out T6 value6, out T7 value7, out T8 value8) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     ok = Assign(match, 6, out value6) && ok; 
     ok = Assign(match, 7, out value7) && ok; 
     ok = Assign(match, 8, out value8) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5, out T6 value6, out T7 value7, out T8 value8, out T9 value9) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     ok = Assign(match, 6, out value6) && ok; 
     ok = Assign(match, 7, out value7) && ok; 
     ok = Assign(match, 8, out value8) && ok; 
     ok = Assign(match, 9, out value9) && ok; 
     return ok; 
    } 

    public bool Parse<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string input, out T1 value1, out T2 value2, out T3 value3, out T4 value4, out T5 value5, out T6 value6, out T7 value7, out T8 value8, out T9 value9, out T10 value10) 
    { 
     bool ok = true; 
     var match = this.regex.Match(input); 
     ok = Assign(match, 1, out value1) && ok; 
     ok = Assign(match, 2, out value2) && ok; 
     ok = Assign(match, 3, out value3) && ok; 
     ok = Assign(match, 4, out value4) && ok; 
     ok = Assign(match, 5, out value5) && ok; 
     ok = Assign(match, 6, out value6) && ok; 
     ok = Assign(match, 7, out value7) && ok; 
     ok = Assign(match, 8, out value8) && ok; 
     ok = Assign(match, 9, out value9) && ok; 
     ok = Assign(match, 10, out value10) && ok; 
     return ok; 
    } 

    private bool Assign<X>(Match match, int index, out X value) 
    { 
     if (match.Success) 
     { 
      Group group = match.Groups[index]; 
      var stringValue = group.Value; 
      var foo = TypeDescriptor.GetConverter(typeof(X)); 
      value = (X)(foo.ConvertFromInvariantString(stringValue)); 
      return true; 
     } 
     else 
     { 
      value = default(X); 
      return false; 
     } 
    } 
相关问题