Спецификация [0] текстового модуля CSS определяет свойство text-space-collapse
, позволяющее управлять тем, как белое пространство внутри и вокруг элемента обрабатывается.
Итак, в отношении ваш пример, вам просто нужно написать это:
p {
text-space-collapse: discard;
}
К сожалению, ни один браузер не реализует это свойство еще (по состоянию на сентябрь 2016 года), как упоминалось в комментариях к ответу HBP .
Возможно, вы можете создать пользовательский JsonConverter
и применить его к свойству.
Ниже приведен пример (ПРИМЕЧАНИЕ. Я не использовал этот api раньше, поэтому его, вероятно, можно было бы улучшить больше, но Следующее должно дать вам приблизительную идею):
public class Person
{
[JsonConverter(typeof(IdToStringConverter))]
public long ID { get; set; }
public string Name { get; set; }
}
public class IdToStringConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken jt = JValue.ReadFrom(reader);
return jt.Value<long>();
}
public override bool CanConvert(Type objectType)
{
return typeof(System.Int64).Equals(objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value.ToString());
}
}
Действие веб-API:
public Person Post([FromBody]Person person)
{
return person;
}
Запрос:
POST http://asdfasdf/api/values HTTP/1.1
Host: servername:9095
Connection: Keep-Alive
Content-Type: application/json
Content-Length: 42
{"ID":"1306270928525862400","Name":"Mike"}
Ответ:
HTTP/1.1 200 OK
Content-Length: 42
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 28 Jun 2013 17:02:18 GMT
{"ID":"1306270928525862400","Name":"Mike"}
EDIT: если вы не хотите украшать свойство атрибутом, вы можете добавить его в коллекцию Converters. Пример:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IdToStringConverter());
Я бы, вероятно, просто создал анонимный тип, когда я вызываю сериализатор json, например:
JsonConvert.SerializeObject(new { instance.Name, instance.ID.ToString() } );
В том случае, если ваш класс имеет 20 или что-то другое, и это становится очень уродливым решением, я бы добавил строка в класс с именем ID
, измените длину до lID
или что-то еще и используйте настройки сериализатора, чтобы игнорировать длинные при сериализации, поэтому в результате json будет иметь только строчную версию.
несколько различных атрибутов, которые будут выполнены, например:
public class CustomerEntity
{
[ScriptIgnore]
public long _ID { get; set; }
public string ID { get; set; }
public string Name { get; set; }
}
Не будет сериализоваться _ID
В зависимости от вашего случая вы могли бы использовать геттеры и сеттеры для маскировки свойства как строки во время сериализации JSON.
public class Money
{
[JsonIgnore]
public decimal Money { get; set; }
[JsonProperty("money")]
public string MoneyAsString
{
get { return Money.ToString("0.00"); }
set { Money = decimal.Parse(value); }
}
}
Как насчет view model
, который имеет только свойства string
, например:
public class CustomerEntityViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
Теперь вы имеете дело только с проблемами [сериализации string
и JSON
].
Возможно, жизнеспособным решением будет использование другого типа для ID? Например, вы можете использовать GUID. С GUID вы никогда не закончите границы, и, по-моему, это будет сериализоваться как строка.