[英]How to serialize list property of a dynamic object
我對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]);
}
}
}
所以我得到了這個錯誤Error 324(net :: ERR_EMPTY_RESPONSE)而不是這個JSON結果{values:[1,2]}
我找到了解決方案。 您應該聲明可序列化的手動列表。
例如,我可以在結果對象上添加屬性KnownType
[Serializable]
[KnownType(typeof(List<int>))]
public class DynamicJsonObject : DynamicObject, ISerializable
{
...
}
另一種解決方案是在wcf服務類上使用ServiceKnownType
[ServiceContract]
[ServiceKnownType(typeof(List<int>))]
public interface IDataService
{
...
}
有關信息,您可以使用通用屬性,例如KnownType(typeof(List)
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.