如何在c#中将JObject转换为Object?
我的目的是动态创建对象,我不能有类,因为我不知道属性。 我从API获取关于网格字段和列的数据 (“名称”:“A”,“价值”:“标题1”,“名称”:“B”,“价值”:“标题2”。)。 通过对API的其他调用,我得到了数据列表 (字符串列表:[“测试1”、“测试2”]) 我正在创建JObject,比如:如何在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 {
{“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>