Сериализация JSON с помощью DataContractJsonSerializer в C # дает конечные нулевые символы (\ 0) [duplicate]

Основываясь на коде Vinko Vorih, я сделал paginator, работающий с ngx-translate, вот код:

import { Injectable } from '@angular/core';
import { MatPaginatorIntl } from '@angular/material';
import { TranslateService } from "@ngx-translate/core";

export class PaginatorIntlService extends MatPaginatorIntl {
  translate: TranslateService;
  itemsPerPageLabel = 'Items per page';
  nextPageLabel     = 'Next page';
  previousPageLabel = 'Previous page';
  getRangeLabel = function (page, pageSize, length) {
    const of = this.translate ? this.translate.instant('paginator.of') : 'of';
    if (length === 0 || pageSize === 0) {
      return '0 ' + of + ' ' + length;
    }
    length = Math.max(length, 0);
    const startIndex = page * pageSize;
    // If the start index exceeds the list length, do not try and fix the end index to the end.
    const endIndex = startIndex < length ?
      Math.min(startIndex + pageSize, length) :
      startIndex + pageSize;
    return startIndex + 1 + ' - ' + endIndex + ' ' + of + ' ' + length;
  };

  injectTranslateService(translate: TranslateService) {
    this.translate = translate;

    this.translate.onLangChange.subscribe(() => {
      this.translateLabels();
    });

    this.translateLabels();
  }

  translateLabels() {
    this.itemsPerPageLabel = this.translate.instant('paginator.items_per_page');
    this.nextPageLabel = this.translate.instant('paginator.next_page');
    this.previousPageLabel = this.translate.instant('paginator.previous_page');
  }

}

И затем в записи вашего провайдера модулей:

{
  provide: MatPaginatorIntl,
  useFactory: (translate) => {
    const service = new PaginatorIntlService();
    service.injectTranslateService(translate);
    return service;
  },
  deps: [TranslateService]
}

Таким образом, вы можете хранить переводы в своем обычном файле i18n, и если ваше веб-приложение сможет динамически изменять язык, paginator будет переведен по запросу.

10
задан Mark Rucker 5 July 2012 в 15:50
поделиться

2 ответа

using(MemoryStream stream = new MemoryStream()) {
   stream.Position = 0;
   var sr = new StreamReader(stream);
   string myStr = sr.ReadToEnd();
}

Вы не можете использовать GetBuffer, если вы используете конструктор MemoryStream (byte []) .

Цитата MSDN:

Этот конструктор не раскрывает базовый поток. GetBuffer выбрасывает UnauthorizedAccessException.

Вы должны использовать этот конструктор и установить publiclyVisible = true, чтобы использовать GetBuffer

24
ответ дан NLV 23 August 2018 в 17:44
поделиться

В VB.net я использовал это

Dim TempText = System.Text.Encoding.UTF8.GetString (TempMemoryStream.ToArray ())

в C # могут применяться

0
ответ дан Esteban Perez 23 August 2018 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: