2013-10-22 35 views
0

我在Windows Phone应用程序的一些类:序列化与JsonConvert

[DataContract] 
public class Function 
{ 
    [DataMember(Name = "params")] 
    public Params Parametrs { get; set; } 
} 

[DataContract] 
public class Params 
{ 
    [DataMember(Name = "params1")] 
    public bool Params1 { get; set; } 

    [DataMember(Name = "params2")] 
    public string Params2 { get; set; } 

    [DataMember(Name = "params3")] 
    public MyClass Params3 { get; set; } 
} 


public string GetRequestString(Params parametrs) 
{ 
    Function func = new Function() 
      {  
       Parametrs = parametrs 
      }; 
    string json = JsonConvert.SerializeObject(func); 
    return json; 
} 

Params params = new Params() 
    { 
     Params1 = true, 
     Params2 = "MyString", 
     Params3 = myClassObject, 
    } 

    var json = GetRequestString(params); 

我的问题是Params1Params2等,可以有不同的类型。我不能在一个类Params中定义它。

我可以将一组参数,类型,键传递给函数并使用JSON序列化它吗?

这可能与JsonConvert?

回答

2

为C#是强类型语言,它需要的是一个属性的类型在编译时定义。但是,如果需要动态的对象,则可以使用基类Object。但是,您可能需要在使用前将其转换或转换为相关类型。

[DataContract] 
public class Params 
{ 
    [DataMember(Name = "params1")] 
    public object Params1 { get; set; } 

    [DataMember(Name = "params2")] 
    public object Params2 { get; set; } 

    [DataMember(Name = "params3")] 
    public object Params3 { get; set; } 
} 

Params param = new Params() 
{ 
    Params1 = true, 
    Params2 = "MyString", 
    Params3 = new Object(), 
}; 

var json = GetRequestString(param); 
+0

谢谢!它工作正常。顺便说一句,非常频繁的演员阵容会不会影响演出? – Alexandr

+1

除非你做了数百万次演员而没有任何其他工作 - http://stackoverflow.com/questions/1165602/performance-of-typecasting。 – Kami

0

jsonconvert可以在这里把它序列化尝试属性名称数据成员名称=“” 如:

[DataMember(Name = "Params1")] 
public bool Params1 { get; set; }