Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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时读取双重意外标记StartObject时出错_C#_Json_Parsing_Listview_Jsonparser - Fatal编程技术网

C#解析json时读取双重意外标记StartObject时出错

C#解析json时读取双重意外标记StartObject时出错,c#,json,parsing,listview,jsonparser,C#,Json,Parsing,Listview,Jsonparser,我从php脚本中获取json文件,它如下所示: [ {"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name":"acceleration", "unit":"deg" }, {"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name": "gyro", "unit":"deg"} ] <ListView Grid.Row="0" ItemsSource="{Binding OriMe

我从php脚本中获取json文件,它如下所示:

[ 
{"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name":"acceleration", "unit":"deg" },
{"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name": "gyro", "unit":"deg"}
]
<ListView Grid.Row="0" ItemsSource="{Binding OriMeasurements}">
    <ListView.View>
        <GridView>
           <GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Name}"/>
               <GridViewColumn Header="Roll" Width="100" DisplayMemberBinding="{Binding Roll}"/>
               <GridViewColumn Header="Pitch" Width="100" DisplayMemberBinding="{Binding Pitch}"/>
               <GridViewColumn Header="Yaw" Width="100" DisplayMemberBinding="{Binding Yaw}"/>
               <!--<GridViewColumn Header="Data" Width="100" DisplayMemberBinding="{Binding Data}"/>-->
               <GridViewColumn Header="Unit" Width="100" DisplayMemberBinding="{Binding Unit}"/>
         </GridView>
     </ListView.View>
</ListView>
所以,我正在制作一个列表视图,它将显示名称、偏航、横摇和俯仰值以及单位。我已经创建了ListView,我的xaml如下所示:

[ 
{"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name":"acceleration", "unit":"deg" },
{"data": { "yaw":0.0, "roll":0.0, "pitch":0.0 }, "name": "gyro", "unit":"deg"}
]
<ListView Grid.Row="0" ItemsSource="{Binding OriMeasurements}">
    <ListView.View>
        <GridView>
           <GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Name}"/>
               <GridViewColumn Header="Roll" Width="100" DisplayMemberBinding="{Binding Roll}"/>
               <GridViewColumn Header="Pitch" Width="100" DisplayMemberBinding="{Binding Pitch}"/>
               <GridViewColumn Header="Yaw" Width="100" DisplayMemberBinding="{Binding Yaw}"/>
               <!--<GridViewColumn Header="Data" Width="100" DisplayMemberBinding="{Binding Data}"/>-->
               <GridViewColumn Header="Unit" Width="100" DisplayMemberBinding="{Binding Unit}"/>
         </GridView>
     </ListView.View>
</ListView>
tableServer.cs

public class tableServer
    {

        public dynamic getMeasurementsOri() 
        {
            var json = new WebClient().DownloadString("http://ip/file.php");

            return JArray.Parse(json);
        }

    }
public class TableViewModel : INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
        }

        private double _roll;
        public string Roll
        {
            get
            {
                return _roll.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _roll != tmp)
                {
                    _roll = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _pitch;
        public string Pitch
        {
            get
            {
                return _pitch.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _pitch != tmp)
                {
                    _pitch = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _yaw;
        public string Yaw
        {

            get
            {
                return _yaw.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _yaw != tmp)
                {
                    _yaw = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _data;
        public string Data
        {
            get
            {
                return _data.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _data != tmp)
                {
                    _data = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private string _unit;
        public string Unit
        {
            get
            {
                return _unit;
            }
            set
            {
                if (_unit != value)
                {
                    _unit = value;
                    OnPropertyChanged("Unit");
                }
            }
        }

        public TableViewModel(MeasurementModel model)
        {
            UpdateWithModel(model);
        }

        public void UpdateWithModel(MeasurementModel model)
        {
            _name = model.Name;
            OnPropertyChanged("Name");
            _data = model.Data;
            OnPropertyChanged("Data");
            _unit = model.Unit;
            OnPropertyChanged("Unit");
            _roll = model.Roll;
            OnPropertyChanged("Roll");
            _pitch = model.Pitch;
            OnPropertyChanged("Pitch");
            _yaw = model.Yaw;
            OnPropertyChanged("Yaw");
        }

        #region PropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        /**
         * @brief Simple function to trigger event handler
         * @params propertyName Name of ViewModel property as string
         */
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
    }
void RefreshHandlerOri()
        {
            // Read data from server in JSON array format
            dynamic measurementsJsonArray = iotTableOri.getMeasurementsOri();

            // Convert generic JSON array container to list of specific type
            dynamic measurementsListA = measurementsJsonArray.ToObject<List<MeasurementModel>>();


            // Add new elements to collection
            if (OriMeasurements.Count < measurementsListA[0].Count)
            {
                foreach (var m in measurementsListA[0])
                    OriMeasurements.Add(new TableViewModel(m));

            }
            // Update existing elements in collection
            else
            {
                for (int i = 0; i < OriMeasurements.Count; i++)
                {
                    OriMeasurements[i].UpdateWithModel(measurementsListA[0]);
                }
            }

        }
TableViewModel.cs

public class tableServer
    {

        public dynamic getMeasurementsOri() 
        {
            var json = new WebClient().DownloadString("http://ip/file.php");

            return JArray.Parse(json);
        }

    }
public class TableViewModel : INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
        }

        private double _roll;
        public string Roll
        {
            get
            {
                return _roll.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _roll != tmp)
                {
                    _roll = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _pitch;
        public string Pitch
        {
            get
            {
                return _pitch.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _pitch != tmp)
                {
                    _pitch = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _yaw;
        public string Yaw
        {

            get
            {
                return _yaw.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _yaw != tmp)
                {
                    _yaw = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _data;
        public string Data
        {
            get
            {
                return _data.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _data != tmp)
                {
                    _data = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private string _unit;
        public string Unit
        {
            get
            {
                return _unit;
            }
            set
            {
                if (_unit != value)
                {
                    _unit = value;
                    OnPropertyChanged("Unit");
                }
            }
        }

        public TableViewModel(MeasurementModel model)
        {
            UpdateWithModel(model);
        }

        public void UpdateWithModel(MeasurementModel model)
        {
            _name = model.Name;
            OnPropertyChanged("Name");
            _data = model.Data;
            OnPropertyChanged("Data");
            _unit = model.Unit;
            OnPropertyChanged("Unit");
            _roll = model.Roll;
            OnPropertyChanged("Roll");
            _pitch = model.Pitch;
            OnPropertyChanged("Pitch");
            _yaw = model.Yaw;
            OnPropertyChanged("Yaw");
        }

        #region PropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        /**
         * @brief Simple function to trigger event handler
         * @params propertyName Name of ViewModel property as string
         */
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
    }
void RefreshHandlerOri()
        {
            // Read data from server in JSON array format
            dynamic measurementsJsonArray = iotTableOri.getMeasurementsOri();

            // Convert generic JSON array container to list of specific type
            dynamic measurementsListA = measurementsJsonArray.ToObject<List<MeasurementModel>>();


            // Add new elements to collection
            if (OriMeasurements.Count < measurementsListA[0].Count)
            {
                foreach (var m in measurementsListA[0])
                    OriMeasurements.Add(new TableViewModel(m));

            }
            // Update existing elements in collection
            else
            {
                for (int i = 0; i < OriMeasurements.Count; i++)
                {
                    OriMeasurements[i].UpdateWithModel(measurementsListA[0]);
                }
            }

        }
直到这一点,所有这些都正常工作。ListView正在生成适当的列。现在这部分让我感到困惑:

MainViewModel.cs

public class tableServer
    {

        public dynamic getMeasurementsOri() 
        {
            var json = new WebClient().DownloadString("http://ip/file.php");

            return JArray.Parse(json);
        }

    }
public class TableViewModel : INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
        }

        private double _roll;
        public string Roll
        {
            get
            {
                return _roll.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _roll != tmp)
                {
                    _roll = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _pitch;
        public string Pitch
        {
            get
            {
                return _pitch.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _pitch != tmp)
                {
                    _pitch = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _yaw;
        public string Yaw
        {

            get
            {
                return _yaw.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _yaw != tmp)
                {
                    _yaw = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private double _data;
        public string Data
        {
            get
            {
                return _data.ToString("0.0####", CultureInfo.InvariantCulture);
            }
            set
            {
                if (Double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out double tmp) && _data != tmp)
                {
                    _data = tmp;
                    OnPropertyChanged("Data");
                }
            }
        }

        private string _unit;
        public string Unit
        {
            get
            {
                return _unit;
            }
            set
            {
                if (_unit != value)
                {
                    _unit = value;
                    OnPropertyChanged("Unit");
                }
            }
        }

        public TableViewModel(MeasurementModel model)
        {
            UpdateWithModel(model);
        }

        public void UpdateWithModel(MeasurementModel model)
        {
            _name = model.Name;
            OnPropertyChanged("Name");
            _data = model.Data;
            OnPropertyChanged("Data");
            _unit = model.Unit;
            OnPropertyChanged("Unit");
            _roll = model.Roll;
            OnPropertyChanged("Roll");
            _pitch = model.Pitch;
            OnPropertyChanged("Pitch");
            _yaw = model.Yaw;
            OnPropertyChanged("Yaw");
        }

        #region PropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        /**
         * @brief Simple function to trigger event handler
         * @params propertyName Name of ViewModel property as string
         */
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
    }
void RefreshHandlerOri()
        {
            // Read data from server in JSON array format
            dynamic measurementsJsonArray = iotTableOri.getMeasurementsOri();

            // Convert generic JSON array container to list of specific type
            dynamic measurementsListA = measurementsJsonArray.ToObject<List<MeasurementModel>>();


            // Add new elements to collection
            if (OriMeasurements.Count < measurementsListA[0].Count)
            {
                foreach (var m in measurementsListA[0])
                    OriMeasurements.Add(new TableViewModel(m));

            }
            // Update existing elements in collection
            else
            {
                for (int i = 0; i < OriMeasurements.Count; i++)
                {
                    OriMeasurements[i].UpdateWithModel(measurementsListA[0]);
                }
            }

        }
void RefreshHandlerOri()
{
//以JSON数组格式从服务器读取数据
dynamic measurementsJsonArray=iotTableOri.getMeasurementsOri();
//将通用JSON数组容器转换为特定类型的列表
dynamic measurementsListA=measurementsJsonArray.ToObject();
//向集合中添加新元素
if(OriMeasurements.Count

如何将这些值从显示的json提取到我的listview。我尝试了许多选项,但大多数情况下,我在读取两个意外标记时出错:StartObject.Path'[0].data',第1行,位置11。“请提供任何帮助。

您的模型与json不匹配
MeasurementModel
应该有一个属性
Data
,该属性将是一个具有属性
Roll
Pitch
Yaw
的对象。现在我正试图相应地修改我的代码,但我真的不知道怎么做。将JSON粘贴为生成以下代码的代码:公共类Rootobject{public Class1[]Property1{get;set;}}公共类Class1{public Data Data{get;set;}公共字符串名称{get;set;}公共字符串单元{get;set;}}公共类数据{public float yaw{get;set;}public float roll{get;set;}public float pitch{get;set;}}好的,如果我放置公共类数据{public double roll{get;set;}等}和公共数据数据{get;set;}在MeasurementModel.cs中,我必须在我的TableViewModel.cs中公开函数数据。当函数在Model文件夹中定义时,我如何在ViewModel文件夹中创建该函数?我要获取和设置什么?您的模型与json不匹配。
MeasurementModel
应该有一个属性
Data
,该属性将是at的属性是
Roll
Pitch
Yaw
。我一发布这个问题,就发现了这个错误。现在我正试图相应地更改代码,但我不确定如何做。粘贴JSON代码生成如下:公共类Rootobject{public Class1[]Property1{get;set;}}公共类Class1{public Data Data{get;set;}public string name{get;set;}public string unit{get;set;}public class Data{public float yaw{get;set;}public float roll{get;set;}public float pitch{get;set;}好的,如果我放置公共类数据{public double roll{get;set;}等等}和公共数据数据{get;set;}在MeasurementModel.cs中,我必须在TableViewModel.cs中公开函数数据。当函数在Model文件夹中定义时,我如何在ViewModel文件夹中创建该函数?我获取和设置什么?