序列化动态对象

时间:2016-03-31 08:00:53

标签: c# ajax wcf

我正在尝试通过客户端的ajax将数据发送到wcf方法

public class DynamicParse
{      

    // other properties

    public dynamic Value {get;set;}
}

// wcf method
public void PostData(List<DynamicParse> list)
{
    // parse list[0].Value
}

发送到wcf方法的javascript数组:

var data = [{ Value : 1 }, { Value : "test" }, { Value : { message : "hello" } }];

我的困难是当“Value”属性是对象类型时,我如何解析数据 - &gt;来自c#的{message:“hello”},

我尝试了反射和json序列化,到目前为止没有成功..

是否有另一种选项来解析没有动态类型的指定数据? 或者它适合这个问题吗?

感谢

1 个答案:

答案 0 :(得分:0)

首先,JSON中没有特定的数据类型。你必须将它与模型匹配。

由于您似乎希望所有内容都是动态的,因此您只需检查名为Value的动态属性的数据类型。

public class DynamicParse
{      

    // other properties

    public dynamic Value {get;set;}
}

// wcf method
public void PostData(List<DynamicParse> list)
{
    // parse list[0].Value
    foreach(var entry in list)
    {
        if(entry.Value is int)
        {
            int num = entry.Value;
        }
        else if(entry.Value is string)
        {
            string someString = entry.Value;
        }
        else if(entry.Value is MyCustomClass)
        {
            MyCustomClass myClass = entry.Value;
            // Do something
        }
        else
        {
            // Do something
        }
    }    
}

属性Value的数据类型将由.NET框架确定,因此您只需检查它是什么。

编辑:

您还可以将DynamicParse Value的属性从动态更改为对象,缺点是您必须手动转换它。

public class DynamicParse
{      

    // other properties

    public object Value {get;set;}
}

所以你必须检查这样的值..

if(entry.Value is MyCustomClass)
{
    MyCustomClass someObject = (MyCustomClass)entry.Value;
}

对于动态,不需要强制转换只分配值,而是需要对象进行强制转换。