Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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#中将JObject转换为Object?_C# - Fatal编程技术网

如何在c#中将JObject转换为Object?

如何在c#中将JObject转换为Object?,c#,C#,我的目的是动态创建对象,我不能有类,因为我不知道属性。 我从API获取关于网格字段和列的数据 (“名称”:“A”,“价值”:“标题1”,“名称”:“B”,“价值”:“标题2”。)。 通过对API的其他调用,我得到了数据列表 (字符串列表:[“测试1”、“测试2”]) 我正在创建JObject,比如: {“A”:“测试1”,“B”:“测试2”}。 我想将其转换为: {A:test1,b=test2} 我怎样才能成功呢 我们的目标是拥有这种结构 public class DataModel {

我的目的是动态创建对象,我不能有类,因为我不知道属性。 我从API获取关于网格字段和列的数据 (“名称”:“A”,“价值”:“标题1”,“名称”:“B”,“价值”:“标题2”。)。 通过对API的其他调用,我得到了数据列表 (字符串列表:[“测试1”、“测试2”]) 我正在创建JObject,比如:
{“A”:“测试1”,“B”:“测试2”}。
我想将其转换为:
{A:test1,b=test2}
我怎样才能成功呢

我们的目标是拥有这种结构

public class DataModel
{
    public List<BrowserInfoViewModel> Columns { get; set; }
    public List<object> Data { get; set; }
}

public class BrowserInfoViewModel
{
    public string Header { get; set; }
    public string Name { get; set; };
}
网格成功地绑定了数据和列

但我的JObect以这种方式返回到对象,它无法显示数据

{"A": "test 1", "B": "Test 2"} 
来自datagrid的屏幕截图。 (渴望评论)

很抱歉,我在最新的评论中看不到您的代码有错误

我不熟悉DxDataGrid和Blazor(我想),但我没有问题将您的代码放入WPF项目中,从而获得所需的输出

MainWindow.xaml.cs

(该类还包含来自的代码,因为我没有更改它)

public主窗口()
{
初始化组件();
var colinfo=新列表()
{
新建BrowserInfo视图模型(){Header=“Header 1”,Name=“Member1”},
新建BrowserInfo视图模型(){Header=“Header 2”,Name=“Member2”},
};
var rowInfos=new BrowserDataResponseModel()
{
行=新列表()
{
新列表(){“Member1-Value 1”,“Member2-Value 1”},
新列表(){“Member1-Value 2”,“Member2-Value 2”},
新列表(){“Member1-Value 3”,“Member2-Value 3”},
新列表(){“Member1-Value 4”,“Member2-Value 4”},
}
};
var dataGridModel=GetValues1212(行信息,共信息);
MyDataGrid.ItemsSource=dataGridModel.Data;
foreach(dataGridModel.Columns中的var browserInfoViewModel)
MyDataGrid.Columns.Add(新DataGridTextColumn(){Binding=new Binding(BrowserInfo视图模型.Name.ToString()),Header=BrowserInfo视图模型.Header});
}
main window.xaml

<Window x:Class="WpfApp19.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp19"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <DataGrid x:Name="MyDataGrid" AutoGenerateColumns="False" >
    </DataGrid>
</Window>

结果:


string val=string.Format(“A:{0},b={1}”,jobj[“A”],jobj[“b”])?(它会像这样工作)。这是你想要的吗?还是你在找-?@约翰,不,这不是我需要的。结果很好,但DevXpress的Datagrid不接受它作为数据源。在这种情况下,请编辑您的问题,以便明确您想要实现的目标。我提供的代码将其转换为您要求的确切字符串格式。我相信您的说法是不正确的,因为您所说的是两种完全不同的类型,当您说
如果对象数据在该结构中时
{A:test 1,b=test 2}
它根本不是一个
JSon
对象,那就是.ToString()匿名类型的表示——例如,请看这里,您的dataGrid只是不处理JSon字符串或任何字符串,但它需要匿名类型或任何类型谢谢您的帮助。我终于找到了与问题无关的解决方案。使用Datatable,我可以将数据绑定到网格。@Baskovli-没问题,很高兴我能帮上忙。恭喜你找到了适合你需要的解决方案。
{"A": "test 1", "B": "Test 2"} 
public MainWindow()
{
    InitializeComponent();

    var colInfos = new List<BrowserInfoViewModel>()
    {
        new BrowserInfoViewModel() {Header = "Header 1", Name = "Member1"},
        new BrowserInfoViewModel() {Header = "Header 2", Name = "Member2"},
    };
    var rowInfos = new BrowserDataResponseModel()
    {
        Rows = new List<List<string>>()
        {
            new List<string>() {"Member1 - Value 1", "Member2 - Value 1"},
            new List<string>() {"Member1 - Value 2", "Member2 - Value 2"},
            new List<string>() {"Member1 - Value 3", "Member2 - Value 3"},
            new List<string>() {"Member1 - Value 4", "Member2 - Value 4"},
        }
    };

    var dataGridModel = GetValues1212(rowInfos, colInfos);
    MyDataGrid.ItemsSource = dataGridModel.Data;

    foreach (var browserInfoViewModel in dataGridModel.Columns)
        MyDataGrid.Columns.Add(new DataGridTextColumn() { Binding = new Binding(browserInfoViewModel.Name.ToString()), Header = browserInfoViewModel.Header });
}
<Window x:Class="WpfApp19.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp19"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <DataGrid x:Name="MyDataGrid" AutoGenerateColumns="False" >
    </DataGrid>
</Window>