2013-05-13 59 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