2016-02-08 5 views
1

Я использую Jsonconverter для сериализации и десериализации набора данных. Все работает нормально, за исключением случая, когда одна из таблиц имеет нулевой столбец uniqueidentifier. Так что если я сделать мой набор данных, какОшибка при использовании json.net JsonConverter для сериализации/derserialize набора данных

var set = new DataSet(); 
var adapter = newSqlDataAdapter(); 
adapter.SelectCommand = new SqlCommand("Select * from mytable"); 
adapter.Fill(set); 

где туЬаЫе имеет обнуляемого столбец uniqueidentifer и первые несколько значений равны нулю, а затем сериализации

MemoryStream ms = new MemoryStream(); 
using (BsonWriter bw = new BsonWriter(ms)) 
{ 
    JsonSerializer serializer = new JsonSerializer(); 
    serializer.Serialize(bw, set); 
} 
string bson = Convert.ToBase64String(ms.ToArray()); 

где BSON является строковое представление набора данных, все похоже, отлично работает. Но когда я пытаюсь deserialze множества

byte[] data = Convert.FromBase64String(bson); 
MemoryStream ms2 = new MemoryStream(data); 
using (BsonReader reader = new BsonReader(ms2)) 
{ 
    reader.ReadRootValueAsArray = false; 
    JsonSerializer serializer = new JsonSerializer(); 
    DataSet set2 = serializer.Deserialize<DataSet>(reader); 
} 

Он бросает исключение первый раз, когда он пытается записать значение, где остальные значения равны нулю. Сообщение об исключениях - это значение преобразования ошибки a6934b26-3757-469a-9735-41558e4c0985 для ввода «System.String». Path '[13] .MyNullableGuidColumn'.

Как работа вокруг, я перебирал таблицу, меняя нули на guid.empty, но это не похоже на лучший ответ.

Значит ли кто-нибудь знает, как сделать десериализацию работать и оставить нули равными нулю?

+0

Возможно, связанный с: http://stackoverflow.com/questions/32726718/deserialize -a-datatable-with-a-missing-first-column – dbc

ответ

1

Попробуйте использовать этот метод вместо при сериализации ваших данных:

string correctData = JsonConvert.SerializeObject(set, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 

Некоторые больше информации, если вам это нужно: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm

+1

Выполнение этого больше не генерирует исключение, но оно упорядочивает столбцы. Я все же возьму. Благодаря! – user1058410

Смежные вопросы