Сериализация данных члена парламента, не занимающего официального поста

Вы можете сделать это в одном запросе, комбинируя ваши WHERE условия, а затем упорядочивая их в зависимости от того, какой из них соответствует:

SELECT * 
FROM users 
WHERE unique_code = :unique_code OR birthday = :birthday
ORDER BY unique_code = :unique_code DESC
LIMIT 1

Если уникальный код соответствует, unique_code = :unique_code будет равен 1, и так как мы сортируют DESCENDING, эта строка будет первой (и будет единственной строкой, оставшейся после предложения LIMIT. Если уникальный код не совпадает, то, если есть какие-либо строки, они должны совпадать в день рождения.

[ 117] Демонстрация по dbfiddle

73
задан Jon Mitchell 29 April 2009 в 14:49
поделиться

4 ответа

You could use DataContractSerializer (but note you can't use xml attributes - only xml elements):

using System;
using System.Runtime.Serialization;
using System.Xml;
[DataContract]
class MyObject {
    public MyObject(Guid id) { this.id = id; }
    [DataMember(Name="Id")]
    private Guid id;
    public Guid Id { get {return id;}}
}
static class Program {
    static void Main() {
        var ser = new DataContractSerializer(typeof(MyObject));
        var obj = new MyObject(Guid.NewGuid());
        using(XmlWriter xw = XmlWriter.Create(Console.Out)) {
            ser.WriteObject(xw, obj);
        }
    }
}

Alternatively, you can implement IXmlSerializable and do everything yourself - but this works with XmlSerializer, at least.

61
ответ дан 24 November 2019 в 12:25
поделиться

Вы можете использовать System.Runtime.Serialization.NetDataContractSerializer . Он более мощный и исправляет некоторые проблемы классического сериализатора Xml.

Обратите внимание, что для этого есть различные атрибуты.

[DataContract]
public class X
{
  [DataMember]
  public Guid Id { get; private set; }
}


NetDataContractSerializer serializer = new NetDataContractSerializer();
TextWriter tw = new StreamWriter(_location);
serializer.Serialize(tw, obj);

Редактировать:

Обновление на основе комментария Марка: Вы, вероятно, должны использовать System. Runtime.Serialization.DataContractSerializer для вашего случая, чтобы получить чистый XML. Остальной код такой же.

6
ответ дан 24 November 2019 в 12:25
поделиться

Поля только для чтения не будут сериализованы с использованием XmlSerializer , это связано с природой ключевого слова readonly

из MSDN:

Ключевое слово readonly - это модификатор, который вы можете использовать в полях. Когда объявление поля включает в себя модификатор readonly, присваивания полям, введенным объявлением, могут происходить только как часть объявления или в конструкторе того же класса.

Так что ... вам в значительной степени необходимо установить поля значение в конструкторе по умолчанию ...

2
ответ дан 24 November 2019 в 12:25
поделиться

Its not possible with that particular serialization mode (see the other comments for workarounds). If you really want to leave your serialization mode as-is, you have to work around the framework limitations on this one. See this example

Esentially, mark the property public, but throw an exception if it's accessed at any time other than deserialization.

0
ответ дан 24 November 2019 в 12:25
поделиться
Другие вопросы по тегам:

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