我完全新的EpiServer,這已經殺了我好幾天:(連載整個頁面樹JSON在EpiServer
我正在尋找一種簡單的方法來一個網頁,它的所有後代轉換成JSON樹。
我有這麼遠:
public class MyPageController : PageController<MyPage>
{
public string Index(MyPage currentPage)
{
var output = new ExpandoObject();
var outputDict = output as IDictionary<string, object>;
var pageRouteHelper = ServiceLocator.Current.GetInstance<EPiServer.Web.Routing.PageRouteHelper>();
var pageReference = pageRouteHelper.PageLink;
var children = DataFactory.Instance.GetChildren(pageReference);
var toOutput = new { };
foreach (PageData page in children)
{
outputDict[page.PageName] = GetAllContentProperties(page, new Dictionary<string, object>());
}
return outputDict.ToJson();
}
public Dictionary<string, object> GetAllContentProperties(IContentData content, Dictionary<string, object> result)
{
foreach (var prop in content.Property)
{
if (prop.IsMetaData) continue;
if (prop.GetType().IsGenericType &&
prop.GetType().GetGenericTypeDefinition() == typeof(PropertyBlock<>))
{
var newStruct = new Dictionary<string, object>();
result.Add(prop.Name, newStruct);
GetAllContentProperties((IContentData)prop, newStruct);
continue;
}
if (prop.Value != null)
result.Add(prop.Name, prop.Value.ToString());
}
return result;
}
}
的問題是,通過轉換頁面結構,字典,在我的網頁上JsonProperty屬性名的註釋丟失:
[ContentType(DisplayName = "MySubPage", GroupName = "MNRB", GUID = "dfa8fae6-c35d-4d42-b170-cae3489b9096", Description = "A sub page.")]
public class MySubPage : PageData
{
[Display(Order = 1, Name = "Prop 1")]
[CultureSpecific]
[JsonProperty(PropertyName = "value-1")]
public virtual string Prop1 { get; set; }
[Display(Order = 2, Name = "Prop 2")]
[CultureSpecific]
[JsonProperty(PropertyName = "value-2")]
public virtual string Prop2 { get; set; }
}
這意味着我得到JSON這樣的:
{
"MyPage": {
"MySubPage": {
"prop1": "...",
"prop2": "..."
}
}
}
取而代之的是:
{
"MyPage": {
"MySubPage": {
"value-1": "...",
"value-2": "..."
}
}
}
我知道如何使用自ContractResolvers的JSON序列化,但不會幫我,因爲我需要無法從C#屬性名稱推斷的JSON屬性名稱。
我也想爲頁面本身設置自定義的JSON屬性名稱。
我真的很希望友善的EpiServer大師能夠幫助我在這裏!
感謝提前:)
您可以更新您的問題,包括的toJSON實施,以及,一個建議,我會做的是改變'詞典<字符串,對象>'來'詞典<字符串,MySubPage>' – din
我只是用'outputDict .ToJson();'在Index方法的末尾。關於你的建議,我可以這樣做我猜:'var newStruct = new Dictionary();' 雖然我不確定這會有幫助嗎? –
更新:我現在嘗試了JOS.Content.Json。希望這會有所幫助。如果是這樣,我會發布我的解決方案。 https://github.com/joseftw/JOS.ContentJson –