2016-06-08 48 views
1

我想用json模式構建用戶和對話特定的對話框,並且我有完美地生成json的LINQ查詢。如果我將json的一個樣本保存到磁盤上,並使用它作爲annotatedsandwich示例從磁盤上的文件中讀取它,那麼效果很好。每個用戶和對話json是唯一的,而不是寫入磁盤,我想在內存中使用它。我沒有看到如何將json字符串傳遞給BuildJsonForm方法,或者如何獲取BuildJsonForm方法中的用戶ID信息,以便根據用戶和會話生成json。我知道我錯過了可以讓我這樣做但我沒有找到它的東西。任何協助如何做到這一點將不勝感激。謝謝。使用Json創建FormDialog

回答

0

而不是做(使用AnnotatedSandwich代碼)

FormDialog.FromForm(SandwichOrder.BuildJsonForm) 

你可以只建BuildFormDelegate並通過您的參數:

string schema = "your jsonform schema"; 
BuildFormDelegate<JObject> formDelegate =() => SandwichOrder.BuildJsonForm(schema); 

FormDialog.FromForm(formDelegate) 
+0

ejadib,非常感謝你的建議。我試了一下,但是當我運行這個例子的時候,我得到了一個ClosureCaptureException:「捕獲環境的匿名方法閉包不是可序列化的,考慮去除環境捕獲或者使用反射序列化代理:{instance}」。有關如何避免這種情況的任何想法? – wjvii

0

創建自定義表單生成器到你通過自定義窗體json模式

[Serializable] 
public class CustomFormBuilder 
{ 
    public string FormJson { get; set; } 

    public CustomFormBuilder(string formJson) 
    { 
     FormJson = formJson; 
    } 

    public IForm<JObject> BuildJsonForm() 
    { 
     var schema = JObject.Parse(FormJson); 

     var form = new FormBuilderJson(schema) 
      .AddRemainingFields() 
      .Build(); 

     return form; 
    } 
} 

用法如下(其中formJson是y我們的用戶特定表格)

var formBuilder = new CustomFormBuilder(formJson); 

var jsonFormDialog = FormDialog.FromForm(
    formBuilder.BuildJsonForm, 
    FormOptions.PromptInStart); 

這將避免ClosureCaptureException。