Thanks Marc for your analysis..   Thanks for clarifying  me that generated
code for my proto files does not suitable for all serialized API, I was
thinking the other way.

And, generated code through protobuf-net's tooling works very well . But, I
am not able to generated code for all my proto's even though , "  my
dependant proto files are in same folder "

" Paths should be relative to the import paths, not rooted
Parameter name: name
   at Google.Protobuf.Reflection.FileDescriptorSet.Add(String name, Boolean
includeInOutput, TextReader source, FileDescriptorProto fromFile)
   at protogen.Program.Main(String[] args) ".

And , thanks for the solution by giving this clue , --> generated code
*tested* against the specific API it is designed for - Google's protobuf
library  ..

I am converting my input to object via Google's protobuf library JSON
parser and it works fine. It sounds may insane, This is what I doing now,
xml --> json --> CS object --> serialize and writing to stream

Thanks for your help !!! Much appreciated !

On Wed, 21 Aug 2019 at 15:39, Marc Gravell <[email protected]> wrote:

> OK; that helps a bit; now, I've tried that with:
>
> using Google.Protobuf;
> using SCL.PC;
> using System;
> using System.Xml.Serialization;
>
> static class P
> {
>     static void Main()
>     {
>         var obj = new ClientIdentifier
>         {
>             Context = ClientIdentifier.Types.Context.Cfid,
>             Value = ByteString.CopyFrom(00, 01, 02, 03)
>         };
>         var ser = new XmlSerializer(obj.GetType());
>         ser.Serialize(Console.Out, obj);
>     }
> }
>
> ---
>
> I **cannot** reproduce the error you're seeing, but I *do* get another
> error, as shown below.
>
> This tells me, ultimately, that your model *isn't going to work with
> XmlSerializer*. And that's fine - the code is only *tested* against the
> specific API it is designed for - Google's protobuf library in this case.
>
> If XmlSerializer on some down-level version of .NET has *even more*
> problems, that's... unexpected, but not amazingly surprising.
>
> If you want to use multiple serializers, usually you should have a
> serialization DTO model *per serializer* - one that is designed for use
> with that serializer.
>
> However, there may be another option *if you want*. Google's generated
> code that is contributing to the pain here. Looking at your generated code,
> it looks like your schema is something like:
>
> syntax = "proto3";
> message ClientIdentifier {
>   Context context = 1;
>   bytes value = 2;
> }
> enum Context {
>   Cfid = 0;
>   Csn = 1;
> }
>
> Now, I can run that through protobuf-net's tooling (
> https://protogen.marcgravell.com/#g50e914251fc5d16b94cdc695c8ebac20)
> which gives me the simpler code (attached); if I then run that with the
> tweaked code:
>
> static class P
> {
>     static void Main()
>     {
>         var obj = new ClientIdentifier
>         {
>             Context = Context.Cfid,
>             Value = new byte[] { 00, 01, 02, 03 }
>         };
>         var ser = new XmlSerializer(obj.GetType());
>         ser.Serialize(Console.Out, obj);
>     }
> }
>
> it now all works fine in my version of .NET, and I'm *guessing* that it'll
> work in yours too. This is using a **different library**, specifically
> protobuf-net rather than Google.ProtoBuf, but: the key point here is that
> they both implement the same specification so should be interchangeable.
>
> Up to you!
>
> ---
>
> XmlSerializer exception.
>
> Unhandled exception. System.InvalidOperationException: There was an error
> reflecting type 'SCL.PC.ClientIdentifier'.
>  ---> System.InvalidOperationException: To be XML serializable, types
> which inherit from IEnumerable must have an implementation of
> Add(System.Object) at all levels of their inheritance hierarchy.
> Google.Protobuf.ByteString does not implement Add(System.Object).
>    at System.Xml.Serialization.TypeScope.GetEnumeratorElementType(Type
> type, TypeFlags& flags)
>    at System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type,
> MemberInfo memberInfo, Boolean directReference)
>    at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo
> source, Boolean directReference, Boolean throwOnError)
>    at System.Xml.Serialization.StructModel.GetPropertyModel(PropertyInfo
> propertyInfo)
>    at System.Xml.Serialization.StructModel.GetFieldModel(MemberInfo
> memberInfo)
>    at
> System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping
> mapping, StructModel model, Boolean openModel, String typeName,
> RecursionLimiter limiter)
>    at
> System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel
> model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter
> limiter)
>    at
> System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel
> model, String ns, ImportContext context, String dataType, XmlAttributes a,
> Boolean repeats, Boolean openModel, RecursionLimiter limiter)
>    --- End of inner exception stack trace ---
>    at
> System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel
> model, String ns, ImportContext context, String dataType, XmlAttributes a,
> Boolean repeats, Boolean openModel, RecursionLimiter limiter)
>    at
> System.Xml.Serialization.XmlReflectionImporter.ImportElement(TypeModel
> model, XmlRootAttribute root, String defaultNamespace, RecursionLimiter
> limiter)
>    at
> System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type,
> XmlRootAttribute root, String defaultNamespace)
>    at System.Xml.Serialization.XmlSerializer..ctor(Type type, String
> defaultNamespace)
>    at System.Xml.Serialization.XmlSerializer..ctor(Type type)
>    at P.Main() in C:\Users\marc\source\repos\ConsoleApp14\Program.cs:line
> 16
>
>
> On Wed, 21 Aug 2019 at 10:28, Arun <[email protected]> wrote:
>
>> I did the same but it throwing the error.. I dont know what I am making
>> mistake here . All my application are 3.5 .net version,
>>
>> Please find  actual CS file which I am trying to serialize.
>>
>> On Wed, 21 Aug 2019 at 14:06, Marc Gravell <[email protected]>
>> wrote:
>>
>>> K, I took the tiny bit of code you posted, and added something that uses
>>> it with XmlSerializer, which basically meant implementing the interface
>>> (with NIEs) and adding:
>>>
>>> using System;
>>> using System.Xml.Serialization;
>>> using pb = global::Google.Protobuf;
>>> using pbr = global::Google.Protobuf.Reflection;
>>>
>>> static class Program
>>> {
>>>     static void Main()
>>>     {
>>>         var ser = new XmlSerializer(typeof(ClientIdentifier));
>>>         var obj = new ClientIdentifier();
>>>         ser.Serialize(Console.Out, obj);
>>>     }
>>> }
>>>
>>> ---
>>>
>>> And here's the thing: it works fine! So: if anyone is going to be able
>>> to help you here, you're going to need to meet us half way, by *showing us
>>> the code that doesn't work*.
>>>
>>> On Wed, 21 Aug 2019 at 07:05, Arun <[email protected]> wrote:
>>>
>>>>
>>>> I am not able to initialize XmlSerializer class itself. It is failing
>>>> saying "static Types cannot be serialized "
>>>>
>>>> On Wed, 21 Aug 2019 at 00:20, Marc Gravell <[email protected]>
>>>> wrote:
>>>>
>>>>> Can you show any of your XmlSerializer code here, so can understand
>>>>> it? I wouldn't expect the presence of a static type to break 
>>>>> XmlSerializer,
>>>>> I admit! But also: protobuf code doesn't usually guarantee anything other
>>>>> than that it should work with the corresponding protobuf library.
>>>>>
>>>>> On Tue, 20 Aug 2019, 06:32 arun kumar, <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> @Marc Gravell,
>>>>>>
>>>>>> I auto-generated ".cs" files from each ".proto" file. . Whereever a
>>>>>> message declared inside another message in proto, auto-generated cs file 
>>>>>> is
>>>>>> generated as " Nested Types " and Types class is generated as static. (I
>>>>>> guess , its how the generator defined)
>>>>>>
>>>>>> And, I am trying to convert my xml data into CS object using
>>>>>> XMLSerializer , it complains
>>>>>>
>>>>>> There was an error reflecting type 'SCL.PC.ClientIdentifier'. --->
>>>>>>> System.InvalidOperationException: SCL.PC.ClientIdentifier+Types cannot 
>>>>>>> be
>>>>>>> serialized. Static types cannot be used as parameters or return types.
>>>>>>
>>>>>>
>>>>>> All I am trying to do is ,
>>>>>>
>>>>>> Converting XML data --> CS Object (IMessage) --> proto buf Serialize
>>>>>>> into stream
>>>>>>
>>>>>>
>>>>>>
>>>>>> Is there any way, to convert the xml data to IMessageObject.. I can
>>>>>> see MessageParser has ParseJson object.  Likewise, anything available for
>>>>>> xml ?
>>>>>>
>>>>>>
>>>>>>    var serializer = new XmlSerializer(typeof(SCL.PC.ClientIdentifier
>>>>>> ));
>>>>>>
>>>>>> Auto-Generated CS File :
>>>>>>
>>>>>> public sealed partial class ClientIdentifier :
>>>>>> pb::IMessage<ClientIdentifier> {
>>>>>>     private static readonly pb::MessageParser<ClientIdentifier>
>>>>>> _parser = new pb::MessageParser<ClientIdentifier>(() => new
>>>>>> ClientIdentifier());
>>>>>>     private pb::UnknownFieldSet _unknownFields;
>>>>>>     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
>>>>>>     public static pb::MessageParser<ClientIdentifier> Parser { get {
>>>>>> return _parser; } }
>>>>>>
>>>>>> ---
>>>>>>
>>>>>>     #region Nested types
>>>>>>     /// <summary>Container for nested types declared in the
>>>>>> ClientIdentifier message type.</summary>
>>>>>>     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
>>>>>>     public static partial class Types {
>>>>>>       public enum Context {
>>>>>>         /// <summary>
>>>>>>         /// The client's identifier consists of a functional
>>>>>> identifier (FID) in big-endian format.  Valid values range from 
>>>>>> 0x00000000
>>>>>> to 0xFFFFFFFF.
>>>>>>         /// </summary>
>>>>>>         [pbr::OriginalName("CFID")] Cfid = 0,
>>>>>>         /// <summary>
>>>>>>         /// The client's identifier consists of an ASCII-encoded
>>>>>> serial number.
>>>>>>         /// </summary>
>>>>>>         [pbr::OriginalName("CSN")] Csn = 1,
>>>>>>       }
>>>>>>
>>>>>>     }
>>>>>>     #endregion
>>>>>>
>>>>>>   }
>>>>>>
>>>>>>   #endregion
>>>>>>
>>>>>>
>>>>>> On Monday, 19 August 2019 19:56:45 UTC+5:30, Marc Gravell wrote:
>>>>>>>
>>>>>>> And can we see some code that actually demonstrates this problem?
>>>>>>> That would really help here.
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Protocol Buffers" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/protobuf/a6a61e73-3253-4191-b2a0-27cb63d26bde%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/protobuf/a6a61e73-3253-4191-b2a0-27cb63d26bde%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>
>>>>
>>>> --
>>>> -- Arun
>>>>
>>>>
>>>
>>> --
>>> Regards,
>>>
>>> Marc
>>>
>>
>>
>> --
>> -- Arun
>>
>>
>
> --
> Regards,
>
> Marc
>


-- 
-- Arun

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/CAG5mLyt2poG9bWHbEp_zJLrFjz1R2C4jwBT2BEPw7K01vaq9_Q%40mail.gmail.com.

Reply via email to