Я также думал, что сериализуемый атрибут должен был быть на объекте, но если я не полный новичок (я в середине конца ночного кодирования сессии), следующие работы от SnippetCompiler:
using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Xml.Serialization;
public class Inner
{
private string _AnotherStringProperty;
public string AnotherStringProperty
{
get { return _AnotherStringProperty; }
set { _AnotherStringProperty = value; }
}
}
public class DataClass
{
private string _StringProperty;
public string StringProperty
{
get { return _StringProperty; }
set{ _StringProperty = value; }
}
private Inner _InnerObject;
public Inner InnerObject
{
get { return _InnerObject; }
set { _InnerObject = value; }
}
}
public class MyClass
{
public static void Main()
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
TextWriter writer = new StreamWriter(@"c:\tmp\dataClass.xml");
DataClass clazz = new DataClass();
Inner inner = new Inner();
inner.AnotherStringProperty = "Foo2";
clazz.InnerObject = inner;
clazz.StringProperty = "foo";
serializer.Serialize(writer, clazz);
}
finally
{
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
}
я предположил бы, что XmlSerializer использует отражение по общественным собственностям.
Используйте ISNUMERIC
declare @a varchar(20)
set @a = 'notanumber'
select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end
ISNUMERIC не всегда работает так, как вы могли ожидать: в частности, он возвращает True для некоторых значений, которые впоследствии не могут быть преобразованы в числовые.
Эта статья описывает проблему и предлагает, как обойти это с помощью UDF.
Пустая строка преобразуется в ноль для типов float и int, но не в десятичную. (И преобразуется в 01 января 1900 для datetime = ноль). Я не знаю почему ... это просто ...
Если вам нужно десятичное число (18,0), используйте вместо него bigint. Или приведите сначала через float
ISNUMERIC примет -
и .
и 1.2E3
как число, но все они не могут быть преобразованы в десятичное число.