#c# #json
#c# #json
Вопрос:
РЕШЕНИЕ
Profile newProfileList = new Profile();
newProfileList = myDeserializedClass.profiles[0]; // New profile list is null so i've casted some values from old ones.
myDeserializedClass.profiles.Add(newProfileList);
richTextBox1.Text = JsonConvert.SerializeObject(myDeserializedClass);
Затем я могу снова сохранить его как файл json. Спасибо @Donut
У меня есть следующий код:
OpenFileDialog ofd = new OpenFileDialog();
string txtProfile;
if (ofd.ShowDialog() == DialogResult.OK)
{
txtProfile = File.ReadAllText(ofd.FileName);
richTextBox1.Text = txtProfile;
}
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(richTextBox1.Text);
Используя этот код, я могу прочитать файл JSON и успешно десериализовать его в экземпляр Root
класса. Однако, когда я пытаюсь создать новые профили в этом объекте, я получаю некоторую ошибку о «значениях только для чтения»:
Form1.cs(124,13,124,47): ошибка CS0200: список свойств или индексаторов <Form1.Profile>.Count’ не может быть назначен — он доступен только для чтения
Как я могу правильно отредактировать десериализованные данные (например, добавить новые экземпляры Profile
класса) и сохранить их обратно в файл JSON?
Для справки, вот классы, которые я использую для десериализации.
public class Metadata
{
public string app_flavor { get; set; }
public int app_version { get; set; }
}
public class Profile
{
public int ajax_connections_limit { get; set; }
public bool allow_emulator_ua_detection { get; set; }
public string apply_css_patches { get; set; }
public bool created_by_user { get; set; }
public string custom_user_agent { get; set; }
public bool device_custom_dev_id2 { get; set; }
public string device_id { get; set; }
public string device_id2 { get; set; }
public string device_id_seed { get; set; }
public string device_signature { get; set; }
public string display_resolution { get; set; }
public bool enable_ministra_compatibility { get; set; }
public bool external_player_send_back_key_event { get; set; }
public bool external_player_send_exit_key_event { get; set; }
public bool external_player_send_key_event { get; set; }
public bool external_player_send_ok_key_event { get; set; }
public string firmware { get; set; }
public string firmware_js_api_ver { get; set; }
public string firmware_player_engine_ver { get; set; }
public string firmware_stb_api_ver { get; set; }
public bool fix_ajax { get; set; }
public bool fix_background_color { get; set; }
public bool fix_local_file_scheme { get; set; }
public bool front_panel { get; set; }
public int generic_connections_limit { get; set; }
public string hardware_vendor { get; set; }
public string hardware_version { get; set; }
public string image_date { get; set; }
public string image_description { get; set; }
public string image_version { get; set; }
public string internal_portal_url { get; set; }
public bool is_internal_portal { get; set; }
public int lang_audiotracks { get; set; }
public int lang_subtitles { get; set; }
public string language { get; set; }
public bool limit_max_connections { get; set; }
public string mac_address { get; set; }
public string mac_seed_net_interface { get; set; }
public string media_player { get; set; }
public bool media_player_per_channel { get; set; }
public string name { get; set; }
public string ntp_server { get; set; }
public string overwrite_stream_protocol { get; set; }
public string playlist_charset { get; set; }
public string portal_url { get; set; }
public string proxy_host { get; set; }
public int proxy_port { get; set; }
public bool send_device_id { get; set; }
public string serial_number { get; set; }
public bool show_player_name { get; set; }
public string stb_internal_config { get; set; }
public string stb_model { get; set; }
public bool subtitles_on { get; set; }
public string tasks_data { get; set; }
public bool timeshift_enabled { get; set; }
public string timeshift_path { get; set; }
public string timezone { get; set; }
public bool udpxy_enabled { get; set; }
public string udpxy_url { get; set; }
public bool use_alt_stalker_auth_dialog { get; set; }
public bool use_alternative_web_view_scale_method { get; set; }
public bool use_browser_redirection { get; set; }
public bool use_custom_user_agent { get; set; }
public bool use_extended_mag_api { get; set; }
public bool use_http_proxy { get; set; }
public bool use_mac_based_device_id { get; set; }
public string user_agent { get; set; }
public string uuid { get; set; }
public string video_resolution { get; set; }
public int video_resume_time { get; set; }
public string weather_place { get; set; }
public bool web_proxy_enabled { get; set; }
}
public class Root
{
public Metadata metadata { get; set; }
public List<Profile> profiles { get; set; }
}
Комментарии:
1. Единственным свойством, доступным только для чтения, является
Count
свойствоprofiles
, потому что это aList<Profile>
. Чтобы изменитьCount
, вам нужно добавить или удалить элементы из списка.2. @HereticMonkey как я могу это сделать? Можете ли вы дать мне конкретный пример или ключевые слова для того, как я собираюсь создать новый список <Профиль> ?
3. Вы можете просто позвонить
profiles.Add(new Profile() ...)
. Добавление или удаление элементов из списка автоматически обновитCount
свойство… но, исходя из того, что, похоже, вы пытаетесь сделать,Count
свойство на самом деле не требуется для сериализации объекта обратно в JSON.4. myDeserializedClass.profiles. Добавить (новый профиль () …)
5. О, спасибо всем, особенно Donut! Теперь я могу создать новое количество в разделе профиля json, используя myDeserializedClass.profiles. Добавить (новый профиль ()); и я могу снова сериализовать его. Спасибо всем