Нет. Сериализатор XML работает с XML-схемой, а «True» и «False» недействительны. Booleans.
Вы можете использовать XML Transform для преобразования этих двух значений или реализовать интерфейс IXmlSerializable и выполнить сериализации и десериализации.
Судя по последним данным, вы получите желаемый результат:
WITH rCTE AS(
SELECT 1 AS Level,
id AS GroupID,
[name] AS GroupName,
CONVERT(nvarchar(10),NULL) AS ParentID, --This'll be uniqueidentifier in your real version
CONVERT(nvarchar(255),NULL) AS ParentName
FROM BPAGroup G
WHERE NOT EXISTS (SELECT 1
FROM BPAGroupGroup e
WHERE e.memberid = G.id)
UNION ALL
SELECT r.Level + 1,
G.id AS GroupID,
G.[name] AS GroupName,
r.GroupID AS ParentID,
r.[GroupName] AS ParentName
FROM BPAGroup G
JOIN BPAGroupGroup GG ON G.id = GG.memberid
JOIN rCTE r ON GG.groupid = r.GroupID)
SELECT *
FROM rCTE;
Важно, чтобы вы понимали, как это работает хотя. Как вы сказали в своем посте, вам, кажется, нужно каждый раз пересматривать их. Нет ничего плохого в том, что нужно что-то проверять синтаксис (есть некоторые вещи, которые я иногда с треском проваливаю при запоминании, особенно новые вещи OPENJSON
), но понимаете ли вы, как это работает? Если нет, какой бит не так ли?