На самом деле я решил добавить теги #if / #endif
через скрипт Python после генерации файла кода. Ответ Роберта является функционально верным, но я просто не чувствовал себя хорошо, когда использовал два отдельных класса, когда один должен быть в порядке.
Хотя это вводит другой язык в генерацию модели данных, это кажется самым чистым способом получить именно то, что я хочу. Сценарий, который мы используем, ниже. Теперь нужно только проверить атрибуты NonSerializable (в частности, на событиях PropertyChanged) из-за нового способа, которым мы структурировали контракт данных.
#!/usr/bin/env python
import sys
from optparse import OptionParser
import shutil
# Use OptionParser to parse script arguments.
parser = OptionParser()
# Filename argument.
parser.add_option("-f", "--file", action="store", type="string", dest="filename", help="C# class file to parse", metavar="FILE.cs")
# Parse the arguments to the script.
(options, args) = parser.parse_args()
# The two files to be used: the original and a backup copy.
filename = options.filename
# Read the contents of the file.
f = open( filename, 'r' )
csFile = f.read()
f.close()
# Add #if tags to the NonSerialized attributes.
csFile = csFile.replace(' [field: NonSerialized()]',
' #if !SILVERLIGHT\r\n [field: NonSerialized()]\r\n #endif')
# Rewrite the file contents.
f = open( filename, 'r' )
f.write(csFile)
f.close()