2013-05-13 57 views
1

我有一个序列化wcf服务(JSON输出)的问题。 我使用dynamicobject为我的REST服务返回ligth JSON。如何序列化动态对象的列表属性

此代码返回一个空的结果(不可能连载):

public DynamicJsonObject DoWork() 
{ 
    dynamic result = new DynamicJsonObject(); 
    result.values = new List<int>() { 1, 2 }; 
} 

但是这个代码工作完美

public DynamicJsonObject DoWork() 
{ 
    dynamic result = new DynamicJsonObject(); 
    result.values = 1; 
} 

我DynamicJsonObject类是:

[Serializable] 
public class DynamicJsonObject : DynamicObject, ISerializable 
{ 
    private IDictionary<String, Object> Dictionary { get; set; } 

    public DynamicJsonObject() 
    { 
     Dictionary = new Dictionary<String, Object>(); 
    } 

    public DynamicJsonObject(SerializationInfo info, StreamingContext context) 
    { 
     Dictionary = new Dictionary<String, Object>(); 
    } 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     var hasKey = Dictionary.ContainsKey(binder.Name); 
     result = hasKey ? Dictionary[binder.Name] : null; 
     return hasKey; 
    } 

    public override bool TrySetMember(SetMemberBinder binder, object value) 
    { 
     Dictionary[binder.Name] = value; 
     return true; 
    } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     foreach (String key in Dictionary.Keys) 
     { 
      info.AddValue(key.ToString(), Dictionary[key]); 
     } 
    } 
} 

所以我就此错误错误324(net :: ERR_EMPTY_RESPONSE)而不是此JSON结果{值:[1,2]}

+0

欢迎来到SO。你有什么问题?你有什么问题? – 2013-05-13 08:22:58

+0

我得到这个错误:Erreur 324(net :: ERR_ EMPTY_RESPONSE) – 2013-05-13 12:09:58

回答

1

我找到了解决办法。您应该声明可序列化的手动列表。

在我为例,我可以添加属性KnownType结果对象

[Serializable] 
[KnownType(typeof(List<int>))] 
public class DynamicJsonObject : DynamicObject, ISerializable 
{ 
    ... 
} 

另一个解决方案是使用ServiceKnownType的WCF服务类

[ServiceContract] 
[ServiceKnownType(typeof(List<int>))] 
public interface IDataService 
{ 
    ... 
} 

的信息,您可以使用通用属性如KnownType(typeof(List)

0
List<UserDetails> list = new List<UserDetails>();//UserDetails is my class name it has some properties 

系列化您可以使用此代码:

var objSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
string sJSON = objSerializer.Serialize(list); 
return list; 
+0

因为结果不是这种溶​​液: 代替 “[1,2]” [1,2] – 2013-05-13 12:13:13