Если я использую json_encode () на массиве как это:
return json_encode(array( 'foo' => 'bar'));
Возврат:
{'foo' : 'bar'}
Ключ передается как литерал, и это сбивает с толку мой сценарий. То, в чем я действительно нуждаюсь:
{ foo : 'bar' }
json_encode делает это, или я должен разделить кавычки сам с некоторым ужасным regex?
Я проходил http://bradwilson.typepad.com/blog/2009/04/dataannotations-and-aspnet-mvc.html , в этом посте мне не понравилась идея поставить проверочные тесты в тест контроллера и несколько вручную проверить в каждом тесте, что если атрибут проверки существует или нет. (который имеет атрибуты метаданных, по причине того, что мы не можем применять атрибуты к автоматически генерируемым классам EDM) и объекты POCO, к свойствам которых применены атрибуты ValidationAttributes.
Вспомогательный метод не разбивается на иерархические объекты, но проверка может быть проверена на плоских отдельных объектах (Type-level)
class TestsHelper
{
internal static void ValidateObject<T>(T obj)
{
var type = typeof(T);
var meta = type.GetCustomAttributes(false).OfType<MetadataTypeAttribute>().FirstOrDefault();
if (meta != null)
{
type = meta.MetadataClassType;
}
var propertyInfo = type.GetProperties();
foreach (var info in propertyInfo)
{
var attributes = info.GetCustomAttributes(false).OfType<ValidationAttribute>();
foreach (var attribute in attributes)
{
var objPropInfo = obj.GetType().GetProperty(info.Name);
attribute.Validate(objPropInfo.GetValue(obj, null), info.Name);
}
}
}
}
/// <summary>
/// Link EDM class with meta data class
/// </summary>
[MetadataType(typeof(ServiceMetadata))]
public partial class Service
{
}
/// <summary>
/// Meta data class to hold validation attributes for each property
/// </summary>
public class ServiceMetadata
{
/// <summary>
/// Name
/// </summary>
[Required]
[StringLength(1000)]
public object Name { get; set; }
/// <summary>
/// Description
/// </summary>
[Required]
[StringLength(2000)]
public object Description { get; set; }
}
[TestFixture]
public class ServiceModelTests
{
[Test]
[ExpectedException(typeof(ValidationException), ExpectedMessage = "The Name field is required.")]
public void Name_Not_Present()
{
var serv = new Service{Name ="", Description="Test"};
TestsHelper.ValidateObject(serv);
}
[Test]
[ExpectedException(typeof(ValidationException), ExpectedMessage = "The Description field is required.")]
public void Description_Not_Present()
{
var serv = new Service { Name = "Test", Description = string.Empty};
TestsHelper.ValidateObject(serv);
}
}
это еще одна запись http://johan.driessen.se/archive/2009/11/18/testing-dataannotation-based-validation-in-asp.net-mvc.aspx , в которой говорится о проверке в .Net 4, но я думаю, что я собираюсь придерживаться моего вспомогательного метода, который действителен как в 3,5, так и в 4
-121--926211-Попробуйте добавить.. «/» в начале URI. Например:
../images/outbound-blue.png
.. «/» в начале URI подсказывает браузеру подниматься на один уровень в родительский каталог, а затем искать в каталоге images
. В настоящее время набор поиск подкаталога с именем images
в каталоге, содержащем таблицы стилей.
При тестировании этой части кода:
echo json_encode(array( 'foo' => 'bar'));
die;
получается:
{"foo":"bar"}
Что является допустимым JSON.
(Обратите внимание, что это двойные кавычки, а не простые кавычки, как вы разместили)
Выход, который вы просите:
{ foo : 'bar' }
является допустимым Javascript, но не является допустимым JSON -- так что json _ encode
не вернет это.
Описание формата JSON см. в json.org - это подмножество Javascript, а не сам Javascript.
Вместо того, чтобы « лишать себя цитат каким-то уродливым регексом », вы должны адаптировать свой код, поэтому он принимает действительный JSON: это намного лучше, на мой взгляд.
Всем спасибо. Я не знал этого о спецификации JSON. На самом деле проблема заключалась в моем скрипте, потому что я не установил тип данных моей функции $ .ajax () на "json"
. То, что я узнал сегодня, - JSON и Javascript - это не одно и то же!
Вопреки какой документация для NetworkStream. Читать , подразумевает, поток, полученный из , TcpClient
делает не , просто возвращение 0 для числа байтов читало, когда нет никаких доступных данных - это блокирует.
Если вы посмотрите документация для TcpClient
, то вы будете видеть эту линию:
класс TcpClient предоставляет простые методы для соединения, отправки и получения данных о потоке по сети в синхронный метод блокирования.
Теперь я думаю, что если ваш Read
вызов блокируется, это потому, что сервер решил не отправлять какие-либо данные обратно. Вероятно, это связано с тем, что первоначальный запрос не проходит должным образом.
Мое первое предложение состоит в том, чтобы исключить StreamWriter
в качестве возможной причины (то есть, буферизация/кодирование нюансов) и записать непосредственно в поток с помощью метода StartStream.Write
. В этом случае убедитесь, что для StreamWriter
используются правильные параметры.
Второе предложение состоит в том, чтобы не зависеть от результата вызова Read
, чтобы разорвать петлю. Для класса StartStream
задано свойство DataAvailable
. Правильный способ записи цикла приема:
NetworkStream netStream = client.GetStream();
int read = 0;
byte[] buffer = new byte[1024];
StringBuilder response = new StringBuilder();
do
{
read = netStream.Read(buffer, 0, buffer.Length);
response.Append(Encoding.ASCII.GetString(buffer, 0, read));
}
while (netStream.DataAvailable);
-121--3603183- Я рассмотрел аналогичную проблему с использованием нескольких методов хеширования. Я также использовал подход кодирования типа хеш-метода в базе данных (т.е. "альфа", "бета", "гамма", "дельта"). Я пометил все текущие хеши соответствующим уровнем. Как пользователи вошли в систему, я проверил их пароли и повторно хэшировал их с помощью обновленных методов. Срок действия наших паролей истекает через 90 дней, поэтому это был просто вопрос сохранения в течение 3 месяцев, пока все пароли, использующие старые методы, не могут быть сброшены.
-121--2747220- Нет, json _ encode
не сделает этого для вас. Спецификация json , в частности, требует, чтобы ключи приводились в кавычки. Это сделано для обеспечения того, что ключи, являющиеся зарезервированными словами javascript, не разрывают объект данных.
Как это отключает ваш скрипт?
И в соответствии со спецификацией JSON , ключевые имена предполагаются как строки. Второй фрагмент, который вы разместили, не является действительным JSON.