2016-06-08 3 views
1

Я пытаюсь создать специальные диалоги пользователей и разговоров с помощью json-схемы, и у меня есть запросы LINQ, которые отлично генерируют json. Если я сохраню образец json на диск и использую его как аннотированный и примерный пример, где он читается из файла на диске, он отлично работает. Json уникален для пользователя и разговора, и вместо записи на диск я хочу использовать его в памяти. Я не вижу, как передать строку json методу BuildJsonForm или поочередно, как получить информацию userID в методе BuildJsonForm, чтобы генерировать 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: «Закрытие анонимного метода, которое захватывает среду, не сериализуемо, подумайте об удалении захвата среды или использовании суррогата сериализации отражения: {экземпляр}». Любые мысли о том, как я избегаю этого? – wjvii

0

Создание пользовательской формы строителя, который вы передаете свой собственный вид json schema

[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 is y наша специальная анкета)

var formBuilder = new CustomFormBuilder(formJson); 

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

Это позволит избежать блокировки ClosureCaptureExcept.