Tôi có một assembly với DataContracts và tôi cần tạo lược đồ .proto để nó có thể trao đổi dữ liệu với hệ thống java. Mã DataContracts có thể được thay đổi nhưng tôi không thể thêm các thuộc tính [ProtoContract]
và [ProtoMember]
vào nó bởi vì nó sẽ dẫn đến sự phụ thuộc lắp ráp protobuf-net. Chúng tôi sử dụng WCF trong C# phần của hệ thống vì vậy chúng tôi sẽ không muốn có phụ thuộc vào lắp ráp proto-buf trong hầu hết các dự án C# mà không làm việc với hệ thống java.serialization protobuf-net mà không có thuộc tính
Trên trang web protobuf-net trong một phần GettingStarted nó nói rằng:
Không thích Thuộc tính?
Trong v2, mọi thứ có thể được thực hiện với các thuộc tính cũng có thể được cấu hình trong thời gian chạy qua RuntimeTypeModel.
Tuy nhiên tôi không biết cách cấu hình tuần tự hóa mà không có thuộc tính và tôi chưa thấy bất kỳ ví dụ nào về điều đó.
Tôi đang cố gắng để làm
[DataContract]
public class MyEntity
{
[DataMember(Order = 1)]
public String PropertyA { get; set; }
[DataMember(Order = 2)]
public int PropertyB { get; set; }
}
RuntimeTypeModel.Default.Add(typeof(MyEntity), false);
string proto = Serializer.GetProto<MyEntity>();
Và có được sau làm giá trị của proto
package ProtobufTest;
message MyEntity {
}
Cảm ơn phản hồi nhanh chóng! Tôi sử dụng cùng một phiên bản. Tham số thứ hai trong 'RuntimeTypeModel.Default.Add (typeof (MyEntity), ...)' thực sự là 'false'. Với 'true' hoặc không có cuộc gọi đó, tôi nhận được kết quả tương tự như bạn. – Mike
@Giống như ah, đúng; có, rằng 'false' có nghĩa là" không nhìn vào các thuộc tính ", trong đó bao gồm không nhìn vào các thuộc tính' DataMember (Order = n) '.Nếu bạn vượt qua 'false', bạn cần cấu hình nó bằng tay * - đó là những gì tôi đã làm trong ví dụ trên. Nếu bạn muốn sử dụng thuộc tính 'DataMember (Order = n)': giả sử 'true' –
Bằng cách này, sẽ tốt hơn nếu có các phần' .Add (1, "PropertyA") 'để chấp nhận biểu thức là biểu thức thứ hai tham số cho việc đánh máy mạnh và kiểm tra trình biên dịch :) Điều này sẽ dễ dàng làm việc với các loại không được phân bổ. – Mike