Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从json元素到xaml xamarin视图_C#_Json_Xaml_Serialization_Xamarin.forms - Fatal编程技术网

C# 从json元素到xaml xamarin视图

C# 从json元素到xaml xamarin视图,c#,json,xaml,serialization,xamarin.forms,C#,Json,Xaml,Serialization,Xamarin.forms,我正在尝试通过json做动态应用。有没有更好的办法将json元素转换成xaml视图? 我反序列化json文件,获取视图类型,然后将视图对象初始化 JSON: C#: 这可能相当棘手,取决于您的需要。 我将从根控件开始,很可能StackLayout不会覆盖所有情况,在某些情况下应该使用GridView。现在StackLayout和GridView应该以不同的方式定义子视图 某些控件应在父控件中组合,例如同一行上的标签和按钮。因此,它们应该包装在StackLayout中,方向设置为水平 您的按钮应如

我正在尝试通过json做动态应用。有没有更好的办法将json元素转换成xaml视图? 我反序列化json文件,获取视图类型,然后将视图对象初始化

JSON:

C#:


这可能相当棘手,取决于您的需要。

我将从根控件开始,很可能StackLayout不会覆盖所有情况,在某些情况下应该使用GridView。现在StackLayout和GridView应该以不同的方式定义子视图

某些控件应在父控件中组合,例如同一行上的标签和按钮。因此,它们应该包装在StackLayout中,方向设置为水平

您的按钮应如何响应用户交互?您将在何处以及如何定义单击的事件

您会动态定义页面和页面之间的关系吗
如果不了解您的需求,就很难提出解决方案


一般来说,您的代码将工作,可能会涵盖简单的情况。在许多嵌套控件的情况下,您可能会遇到性能缓慢的问题,因此首先从优化XAML布局开始。定义支持的控件列表并改进JSON反序列化,有很多第三方LIB可以做到这一点,在您的情况下,我会选择最快的一个,因为您严重依赖反序列化速度。

这非常简单。你应该使用Nuget

使用Newtonsoft=>

创建模型:

public class User{
public float FontSize { set; get; }
public String Name { set; get; }
public Enum Type { set; get; }
public String Placeholder { set; get; }
public String Text { set; get; }
}

消费模型

var users = JsonConvert.DeserializeObject<User>(contentResponse);
foreach(User element in users){
if(element.Type == MyEnum.Label){
        //Your logic
    }else if(element.Type = MyEnum.Button){
        //Your logic
    }
}

注意:您的contentResponse是一个用户列表


类型应为枚举。给一个浮点数定大小。在C#中,属性名称应以大写字母开头。如果这里的性能很关键,我建议避免使用Json.NET,因为它不是最快的Json反序列化程序。这正是我所做的。不过,感谢您的支持comment@EvZ谢谢你的贡献。
var users = JsonConvert.DeserializeObject<User>(contentResponse);
foreach(User element in users){
if(element.Type == MyEnum.Label){
        //Your logic
    }else if(element.Type = MyEnum.Button){
        //Your logic
    }