NewtonSoft - преобразование JSON в объект - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь записать файл JSON в объект. Вот как я создаю файл JSON.

                var ActiveCustomer = new Customer(userID, fName, lName, pNumber, sLocation);
                string json = JsonConvert.SerializeObject(ActiveCustomer, Newtonsoft.Json.Formatting.Indented);
                using (StreamWriter file = File.CreateText(curFile))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    serializer.Serialize(file, json);
                }
                Console.WriteLine(json);

Я прочитал документацию, и это самое близкое к созданию объекта из него:

                var ReadFromFile = JsonConvert.DeserializeObject<Customer>(File.ReadAllText(curFile));
                Console.WriteLine(ReadFromFile);

Распечатывает строку, а затем включает в себя длинную ошибку о том, что не может преобразовать строку в объект.

CUSTOMER CLASS ::

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace Project0.Lib
{
    public class Customer
    {
        public string _CustomerID { get; set; }
        public string _FirstName { get; set; }
        public string _LastName { get; set; }
        public string _PhoneNumber { get; set; }
        public string _StoreLocation { get; set; }
        public Customer()
        {

        }
        public Customer(string customerID, string firstName, string lastName, string phonenumber,string storelocation)
        {
            this._CustomerID = customerID;
            this._FirstName = firstName;
            this._LastName = lastName;
            this._PhoneNumber = phonenumber;
            this._StoreLocation = storelocation;
        }
        public override string ToString()
        {
            return _CustomerID + " " + _FirstName + " " + _LastName + " " + _PhoneNumber + " " + _StoreLocation;
        }
    }
}

1 Ответ

0 голосов
/ 18 марта 2020

Придерживайтесь try / catch вокруг кода, десериализующего строку, также сначала выведите строку в переменную, а во время работы разбейте ее и проверьте, как выглядит строка, убедитесь, что строка json правильно, у меня ранее была проблема, когда имена параметров были внутри одинарных речевых меток "вместо двойных"

Одна область, в которой я видел, что проблема может возникнуть в вашем коде (это может испортить строку):

            string json = JsonConvert.SerializeObject(ActiveCustomer, Newtonsoft.Json.Formatting.Indented);
            using (StreamWriter file = File.CreateText(curFile))
            {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(file, json);
            }

В этом случае вы сериализуете объект (отлично), но затем вы используете jsonserializer для его сериализации снова? Это будет означать, что он не будет соответствовать классу объекта Customer. Вместо этого, возможно, просто напишите json строка в файл, поэтому:

 string json = JsonConvert.SerializeObject(ActiveCustomer, Newtonsoft.Json.Formatting.Indented);
 File.WriteAllText(file, json);

https://json.org/example.html может помочь.

Если это не работает, не могли бы вы отредактировать ваше сообщение на включить строку JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...