2014-11-11 16 views
10

ich Fehler bekommen bin "Cannot deserialize string from BsonType ObjectId" bei dem Versuch, von MongoDB all den Datensatz zu erhalten in C# WebAPIKann Zeichenkette nicht von BsonType ObjectId in MongoDB C# deserialisieren

Meine Id

[BsonId] 
public string Id { get; set; } 

ist es

nach dem Ändern
[BsonRepresentation(BsonType.ObjectId)] 
public string Id { get; set; } 

es funktioniert gut

Aber während Ich rufe post-Methode, its me verschiedene Fehler

"'d05e139c-3a48-4213-bd89-eba0c22c3c6f' is not a valid 24 digit hex string." 

geben Wie kann dieses Problem lösen

Mein Modell ist:

public class EstablishmentDetails 
{ 

    [BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 
    public string EstablishmentName { get; set; } 
    public string EstablishmentType { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public int StateID { get; set; } 
    public Int32 PIN { get; set; } 
    public Int64 PhoneNumber { get; set; } 
    public string EmailID { get; set; } 
    public bool Published { get; set; } 
    public string CreatedDate { get; set; } 
    public string ModifiedDate { get; set; } 
} 

Mein Repository fro Get Methode

public IEnumerable<EstablishmentDetails> GetAllEstablishmentDetails() 
    { 
     if (Convert.ToInt32(mCollection.Count()) > 0) 
     { 
      var EstablishmentDetailsCollection = mCollection.FindAllAs(typeof(EstablishmentDetails)); 

      if (EstablishmentDetailsCollection.Count() > 0) 
      { 
       foreach (EstablishmentDetails item in EstablishmentDetailsCollection) 
       { 
        establishmentDetails.Add(item); 
       } 
      } 
     } 
     var results = establishmentDetails.AsQueryable(); 
     return results; 
    } 

Mein Repository für Post-Methode

public EstablishmentDetails Add(EstablishmentDetails ed) 
    { 
     if (string.IsNullOrEmpty(ed.Id)) 
     { 
      ed.Id = Guid.NewGuid().ToString(); 
     } 

     mCollection.Save(ed); 
     return ed; 
    } 

Antwort

3

Statt mit

ed.Id = Guid.NewGuid().ToString(); 

I verwendet

ed.Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); 

Für Id Erzeugung

Seine adaequat:)

1

Guid.NewGuid() wird ObjectId nicht erzeugen. Objekt-ID ist 12 Byte Datenstruktur und Guid produzieren 16Byte Hex-String (ohne '-')

Sie Attribut entfernen sollten [BsonRepresentation(BsonType.ObjectId)]

Sie eine beliebige Zeichenfolge als Id zum Beispiel in Ihrem Unternehmen verwenden können 'HiDude' und jede Zeichenfolge im utf8-Format.

Verwandte Themen